我正在使用PyGObject和Glade在python中编写一个简单的应用程序。该应用程序具有一个主窗口和一个功能窗口(“生成日志”,还有一个“窗口”对象),该窗口在单击菜单项时会打开。
“生成日志”窗口应该:
问题是,一旦我显示了“生成日志”窗口,我也可以直接选择主窗口。然后,我可以转到菜单,并根据需要调出尽可能多的“生成日志”窗口。
我尝试了几种方法(例如“聚焦”,将主窗口设置为“瞬态父级”等),但没有任何效果。我该如何解决?
答案 0 :(得分:0)
创建多个窗口(请参阅其他文章)。 通过 init 上传它们 使用“显示”和“隐藏”在林间中向他们显示“信号”
class GUIxxxx
#...
def action1(self, widget, data=None):
self.window1.show()
def action2(self, widget, data=None):
# do something here
self.window1.hide()
答案 1 :(得分:0)
首先您说PyGTK,然后您说PyGObject,这是两件事。我要为PyGTK回答(我的资料来自GTK + 2文档),因为它在标题中,也许正在寻找的人会在这里结束。但是请不要害怕,因为对于这个问题,答案实际上(我认为是完全相同)对于两者而言都是相同的。
据我了解,您希望“生成日志”窗口为模式。这意味着在您的模式窗口打开时不能使用其他窗口,就像对话框窗口一样。另外,您应该将主窗口设置为模态窗口的parent
,因为这有助于OS窗口管理器,即,将对话框保持在主窗口顶部。
Yo可以直接从Glade(如果您在同一个项目中创建了两个窗口,但并非总是如此)创建这两种方法,选择 Modal 归因于True
,然后在“生成日志”窗口的“常规属性”部分中,将 Transient for Window 属性设置为主窗口。
您还可以使用子窗口的set_modal()
和set_transient_for(parent_window)
方法以编程方式进行操作。
假设您的父窗口名为main_window
,子窗口名为generate_log_window
,则可以这样操作:
generate_log_window.set_modal(gtk.TRUE)
generate_log_window.set_transient_for(main_window)
如果希望它显示在主窗口的顶部,请执行此操作
generate_log_window.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
第二点,可以从Glade设置最小化功能。
资料来源:
GTK+ 2 GtkWindow reference set_modal
GTK+ 2 GtkWindow reference set_transient_for
PyGTK FAQ: How do I get my windows to show up where I want
PyGTK FAQ: How do I make a dialog block the whole application, so the user is forced to answer it?