我想在单击按钮时在两列上添加一个条目。
这是我目前的代码。
python解释器说MainWindow对象没有属性a
。
如何从函数on_adding中访问对象 a
和b
?
现在新问题是,如何显示新创建的对象?
我试过了:
将其添加到函数vbox
中的on_adding
对象。
如何更新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()
答案 0 :(得分:0)
python解释器说MainWindow对象没有属性" a"。
要简单地解决您必须设置UIButton *button =[[UIButton alloc]initWithFrame: CGRectMake(10, 10, 50, 32)];
[button setImage:[UIImage imageNamed:@"image_name"] forState:UIControlStateNormal];
// to set image to fit button size
button.imageView.contentMode = UIViewContentModeScaleAspectFit;
//ScaleToFill (UIViewContentModeScaleToFill)
//ScaleAspectFit (UIViewContentModeScaleAspectFit)
//ScaleAspectFill (UIViewContentModeScaleAspectFill)
而不是self.a
这是一个局部变量。
我发现你的列表很奇怪,只是直接修改Gtk.Box内容。
答案 1 :(得分:0)
更改此
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)