Python 如何在回调函数中更新Gtk.Box对象?
单击按钮时,我想在两列上都添加一个条目。 这是我当前的代码。 python解释器说MainWindow对象没有属性Python 如何在回调函数中更新Gtk.Box对象?,python,pygobject,Python,Pygobject,单击按钮时,我想在两列上都添加一个条目。 这是我当前的代码。 python解释器说MainWindow对象没有属性a 如何从添加功能访问对象a和b 现在的新问题是,如何显示新创建的对象? 我试过: 将其添加到添加上的函数中的vbox对象中 如何更新hbox的 import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk, GObject class MainWindow(Gtk.Window): de
a
如何从添加功能访问对象a
和b
现在的新问题是,如何显示新创建的对象?我试过:
将其添加到添加上的函数
中的vbox
对象中
如何更新hbox的
import gi
gi.require_version('Gtk', '3.0')
from gi.repository
import Gtk, GObject
class MainWindow(Gtk.Window):
def __init__(self): #initiate
Gtk.Window.__init__(self)
self.set_border_width(17)
self.set_default_size(700, 400)
# defining objects
hb = Gtk.HeaderBar()
hbox = Gtk.Box(spacing = 7)
vbox0 = Gtk.Box(orientation = Gtk.Orientation.VERTICAL)
vbox1 = Gtk.Box(orientation = Gtk.Orientation.VERTICAL)
save_button = Gtk.Button("Save")
hintlabel0 = Gtk.Label("Entry A")
hintlabel1 = Gtk.Label("Entry B")
add_button = Gtk.Button("New Entry")
a = list()
b = list()
# appending
a.append(a_entry())
b.append(b_entry())
# property setting
hb.set_show_close_button(True)
hb.props.title = "Cerebrium List Editor"
self.set_titlebar(hb)
hb.pack_end(save_button)
hb.pack_end(add_button)
add_button.connect("clicked", self.on_adding)
# adding
vbox0.add(hintlabel0)
vbox1.add(hintlabel1)
for i in range(0, len(a)):
vbox0.add(a[i])
for i in range(0, len(b)):
vbox1.add(b[i])
hbox.add(vbox0)
hbox.add(vbox1)
self.add(hbox)# flow control
def on_adding(self, button):
self.a.append(a_entry())
self.b.append(b_entry())
class a_entry(Gtk.Entry):
def __init__(self):
Gtk.Entry.__init__(self)
self.set_width_chars(25)
class b_entry(Gtk.Entry):
def __init__(self):
Gtk.Entry.__init__(self)
self.set_width_chars(60)
win = MainWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
python解释器说MainWindow对象没有属性“a”
要简单地解决这个问题,您必须设置self.a
而不是a
,这是一个局部变量
我发现你的列表很奇怪,只是直接修改Gtk.Box的内容
python解释器说MainWindow对象没有属性“a”
要简单地解决这个问题,您必须设置self.a
而不是a
,这是一个局部变量
我发现您的列表很奇怪,只需直接修改Gtk.Box内容即可。更改此设置
add_button.connect("clicked", self.on_adding)
对此
add_button.connect("clicked", self.on_adding, vbox0, vbox1)
还有这个
def on_adding(self, button):
self.a.append(a_entry())
self.b.append(b_entry())
对此,请不要忘记上面评论中提到的show()
def on_adding(self, button, vbox0, vbox1):
entry = a_entry()
self.a.append(entry)
vbox0.add(entry)
entry = b_entry()
self.b.append(entry)
vbox1.add(entry)
改变这个
add_button.connect("clicked", self.on_adding)
对此
add_button.connect("clicked", self.on_adding, vbox0, vbox1)
还有这个
def on_adding(self, button):
self.a.append(a_entry())
self.b.append(b_entry())
对此,请不要忘记上面评论中提到的show()
def on_adding(self, button, vbox0, vbox1):
entry = a_entry()
self.a.append(entry)
vbox0.add(entry)
entry = b_entry()
self.b.append(entry)
vbox1.add(entry)
这次不再出现错误,但是否会将其添加到vbox0
和vbox1
?当我点击它时,它似乎没有显示额外的条目。不,它仍然不会显示新条目。我想使用列表的原因是我可以更容易地获取信息。这次不再出现错误,但是它会添加到vbox0
和vbox1
中吗?当我点击它时,它似乎没有显示额外的条目。不,它仍然不会显示新条目。我想使用列表的原因是我可以更容易地获取信息。