我正在根据另一个SO问题中的代码测试一个简单的示例PyGTK应用程序:How to set default button in PyGTK?。
但是,我试图弄清楚如何访问run()函数返回的值。我知道它被传递到button.connect(),并且其他参数在调用时传递给run(),但由于该函数被称为后者,我不知道如何访问返回值。
def foo():
def run(button, window, entry):
try: snooze_time = int(entry.get_text())
except ValueError: snooze_time = 5
snooze_confirm_message = 'Snoozing for ' + str(snooze_time) + ' minutes'
dialog = gtk.MessageDialog(window, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, snooze_confirm_message)
dialog.run()
dialog.destroy()
return snooze_time
snooze_time = None #Defaults to None
window = gtk.Window()
window.connect("destroy", gtk.main_quit)
vbox = gtk.VBox(spacing = 40)
snooze_time_entry = gtk.Entry()
vbox.pack_start(snooze_time_entry)
button = gtk.Button(stock = gtk.STOCK_SAVE)
#Here the function is being passed to the button, though it is not called until later.
button.connect("clicked", run, window, snooze_time_entry)
button.set_flags(gtk.CAN_DEFAULT)
window.set_default(button)
vbox.pack_start(button)
window.add(vbox)
window.show_all()
gtk.main()
print("the result is " + str(snooze_time))
如果有一个更加惯用于PyGTK的解决方法,那么它在这里很有用,尽管我也有兴趣知道一种更通用的Python方法。
答案 0 :(得分:2)
你应该使用课程。这样的事情(这不是完整的代码):
class Demo:
def __init__(self):
self.__snooze_time = None
self.window = gtk.Window()
self.window.connect("destroy", gtk.main_quit)
self.button = gtk.Button(stock = gtk.STOCK_SAVE)
self.button.connect("clicked", self.run, window, snooze_time_entry)
def run(self, widget, event, data):
try:
self.__snooze_time = int(data.get_text())
except ValueError:
snooze_time = 5