Python + Glade + PyGObject。如何一次获取两个文本字段的值?

时间:2013-09-13 04:37:50

标签: python user-interface gtk glade pygobject

我在使用Glade和Python 3构建UI时有点失落。我已经创建了GtkWindows,其中有GtkBoxGtkBox有一个GtkButton和两个GtkPaned个对象。每个窗格都有一个GtkEntry对象。最终,我希望这成为一个登录表单:用户点击“连接”按钮,两个GtkEntry对象的文本值被处理程序拾取并发送到服务器。我的代码的相关部分如下所示:

class Handler:
    def on_MainWindow_destroy(self, *args):
        Gtk.main_quit(*args)

    def on_LoginButton_clicked(self, *args):
        print(*args)
        #do other stuff


if __name__ == '__main__':
    builder = Gtk.Builder()
    builder.add_from_file('myui.glade')
    builder.connect_signals(Handler())

    window = builder.get_object("MainWindow")
    window.show_all()

    Gtk.main()

(稍微偏离我的问题的原始话题:在Glade中命名GObjects的正确方法是什么?CamelCase?lowercase_underscores?)

我希望LoginButton在单击时对两个字段的文本执行某些操作。但是,Glade只允许您将单个对象传递给处理程序。我可以将on_LoginButton_clicked方法附加到LoginButton两次,并在第一次调用时将用户名字段传递给它,并在第二次调用时将密码字段传递给它,但这看起来非常混乱。什么是正确的方法?

1 个答案:

答案 0 :(得分:2)

您需要使用GtkBuilder的get_object()引用类中的两个对象。然后,在按钮的回调中,只需获得self.myfield1.get_text()左右的文本。检查此模板,了解如何构建PyGObject应用程序:

How can a program that uses GUI be constructed?

希望它有所帮助。

编辑:关于命名方案,我将使用在使用Glade文件的语言上使用的任何命名方案。在PyGObject中编程时,我将Glade文件中的对象命名为与Python变量相同,所以我可以这样做:

[...]
go = self.builder.get_object
self.window = go('window')
self.my_foobar = go('my_foobar')
[...]