如何更新回调函数中的Gtk.Box对象?

时间:2017-03-08 13:46:47

标签: python pygobject

我想在单击按钮时在两列上添加一个条目。 这是我目前的代码。 python解释器说MainWindow对象没有属性a

如何从函数on_adding中访问对象ab
现在新问题是,如何显示新创建的对象? 我试过了:
将其添加到函数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()

2 个答案:

答案 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)