我在使用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
两次,并在第一次调用时将username字段传递给它,在第二次调用时将password字段传递给它,但这看起来很混乱。什么是正确的方法?
您需要在使用GtkBuilder的类中同时引用这两个对象get_object()
。然后,在按钮的回调中只需加上self.myfield1.get_text()
左右两个文本即可。检查此模板以了解如何构建PyGObject应用程序:
希望能帮助到你。
编辑:关于命名方案,我将使用将使用Glade文件的语言使用的任何命名方案。在PyGObject中进行编程时,我将Glade文件上的对象命名为与Python变量相同,因此我可以这样做:
[...]
go = self.builder.get_object
self.window = go('window')
self.my_foobar = go('my_foobar')
[...]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句