【发布时间】:2014-11-08 16:39:35
【问题描述】:
蟒蛇:2.7.5
操作系统:linux、fedora 19
这是显示我遇到的问题的最小示例代码,代码的托盘部分被排除在外,因为它工作正常。
在终端中运行它,当按下最小化按钮时,它会进入show() 和hide() 循环
我认为显示它的最简单方法是让它在每次显示或隐藏时打印一个数字。
问题是:如何让它正常工作而不会陷入循环?
from gi.repository import Gtk, Gdk
class Win(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.connect("delete-event", self.delete_event)
#something to make it easier to see the loop
self.num = 0
self.connect('window-state-event', self.window_state_event_cb)
def window_state_event_cb(self, widget, event):
if event.changed_mask & Gdk.WindowState.ICONIFIED:
if event.new_window_state & Gdk.WindowState.ICONIFIED:
self.hide()
print 'Window was minimized!'
else:
self.show()
print 'Window was unminimized!'
self.num += 1
print(self.num)
def delete_event(self,window,event):
Gtk.main_quit()
if __name__=="__main__":
win = Win()
win.show_all()
Gtk.main()
从http://faq.pygtk.org/index.py?req=edit&file=faq10.022.htp拼凑的代码
【问题讨论】:
-
在哪种情况下会陷入循环?
-
when the minimize button is press -
我尝试了您使用 pygtk-2.24.2 发布的代码,它可以最小化而不会卡住。尝试删除/禁用所有其他事件处理程序并测试您发布的代码是否真的自行循环。
-
它在 linux 上循环,可能是 linux 的问题,但我对此表示怀疑,你是在终端/命令行中运行的吗?
-
Yes 命令行为
python filename.py,我在其中粘贴了您的代码并为我的 pygtk 版本调整了导入等。可能是 linux(我正在赢),可能是你的 gtk 版本...