我在使用Glade和Python 3构建UI时有点失落。我已经创建了GtkWindows
,其中有GtkBox
。 GtkBox
有一个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
两次,并在第一次调用时将用户名字段传递给它,并在第二次调用时将密码字段传递给它,但这看起来非常混乱。什么是正确的方法?
答案 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')
[...]