我有一个林间空地GUI,我正在使用通过pygtk创建的圆顶gtk.MessageDialog小部件进行用户交互。我的问题是,每当我在屏幕上抛出对话框消息时,它们就会在各处显示。一个可能会显示在右上角,下一个会显示在左下角,左上角,左中角等...
是否有一种方法可以强制这些内容显示在屏幕中央或父窗口所在的位置?
没关系。找到了解决方案。
对于其他可能在同一件事上徘徊的人,此问题的解决方案在于为gtk.MessageDialog构造指定一个父值。如果您在类中使用林间空地gui,并且林间空地xml已加载到名为'gui'的变量中,则看起来像这样:
#!/usr/bin/env/python
par = self.gui.get_widget('your_parent_window')
msg = gtk.MessageDialog(type=gtk.MESSAGE_INFO, buttons = gtk.BUTTONS_OK, parent=par)
if msg.run():
msg.destroy()
return None
在PyGTK 2.0 Reference Manual处检查参考材料
我还没有机会尝试,但是MessageDialog似乎是从Window派生的,它具有set_position方法。
此方法接受以下之一:
# No influence is made on placement.
gtk.WIN_POS_NONE
# Windows should be placed in the center of the screen.
gtk.WIN_POS_CENTER
# Windows should be placed at the current mouse position.
gtk.WIN_POS_MOUSE
# Keep window centered as it changes size, etc.
gtk.WIN_POS_CENTER_ALWAYS
# Center the window on its transient parent
# (see the gtk.Window.set_transient_for()) method.
gtk.WIN_POS_CENTER_ON_PARENT
如果尚未显示您的父窗口,也就是说,如果要在类(您的类,而不是“父”窗口类)的实例化过程中显示messagedialog,则所有提供的解决方案都不会起作用。在此期间,即使messagedialog的代码在显示窗口的代码之后,Gtk仍未放置该窗口。这意味着您的对话框将以某种方式“无父母”,并且消息对话框将出现在任何喜欢的地方...
我对这个问题的幼稚解决方案...
GObject.timeout_add(interval=50, function=self.stupid_dialog_1)
和
def stupid_dialog_1(self):
par = self.gui.get_widget('your_parent_window')
msg = gtk.MessageDialog(type=gtk.MESSAGE_INFO, buttons = gtk.BUTTONS_OK, parent=par)
# do anything here...
return False #stop the timer...