我是GTK的新手。我一直在寻找我的问题的答案,但我没有找到任何东西。问题是我想使用GTK FileChooser来选择文件。我一直在看这里可用的例子:
http://pygtk.org/pygtk2tutorial/examples/filechooser.py
然后我使用我在示例中学到的知识将此功能添加到我的程序中。但是,我注意到当我选择一个文件时,窗口会挂起。我的意思是,在关闭整个程序之前,选择文件的窗口永远不会消失。
所以我回到了这个例子,等了一会儿,看看窗户是否被毁坏了。事实上,它没有。选择文件的窗口仅在程序完成时消失。这是代码:
#!/usr/bin/env python
# example filechooser.py
import pygtk
pygtk.require('2.0')
import gtk
import time
# Check for new pygtk: this is new class in PyGtk 2.4
if gtk.pygtk_version < (2,3,90):
print "PyGtk 2.3.90 or later required for this example"
raise SystemExit
dialog = gtk.FileChooserDialog("Open..",
None,
gtk.FILE_CHOOSER_ACTION_OPEN,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OPEN, gtk.RESPONSE_OK))
dialog.set_default_response(gtk.RESPONSE_OK)
filter = gtk.FileFilter()
filter.set_name("All files")
filter.add_pattern("*")
dialog.add_filter(filter)
filter = gtk.FileFilter()
filter.set_name("Images")
filter.add_mime_type("image/png")
filter.add_mime_type("image/jpeg")
filter.add_mime_type("image/gif")
filter.add_pattern("*.png")
filter.add_pattern("*.jpg")
filter.add_pattern("*.gif")
filter.add_pattern("*.tif")
filter.add_pattern("*.xpm")
dialog.add_filter(filter)
response = dialog.run()
if response == gtk.RESPONSE_OK:
print dialog.get_filename(), 'selected'
elif response == gtk.RESPONSE_CANCEL:
print 'Closed, no files selected'
dialog.destroy()
time.sleep(3)
在那3秒内窗口就在那里,所以我猜它永远不会被破坏,我想知道为什么。即使我等待10秒钟,窗口也不会消失,直到程序结束。我需要知道示例中是否有错误或我做错了什么,因为这不是我希望在我的程序中发生的事情。
以防万一,我使用的是Python 2.7.3和Debian 7.
提前致谢!
答案 0 :(得分:0)
你不能在没有主循环的情况下使用GTK +:现在代码工作的唯一原因是dialog.run()恰好在该调用期间运行自己的内部主循环。之后没有mainloop来处理诸如调用窗口的destroy处理程序之类的事情。
初始化应用后,运行gtk.main()
而不显示对话框。然后从适当的信号处理程序调用{{1}}和相关代码 - 出于测试目的,您可以在调用main之前添加dialog.run()
:这样在主循环开始运行后立即调用处理程序。