我有一个glade GUI,我正在使用用pygtk创建的圆顶gtk.MessageDialog小部件进行用户交互。我的问题是每当我在屏幕上抛出一条对话框消息时,它们就会出现在整个地方。一个可能出现在右上角,下一个出现在左下角,左上角,左上角等......
有没有办法强制这些东西显示在屏幕中央或父窗口所在的位置?
答案 0 :(得分:5)
没关系。找到了解决方案。
对于可能对同一事物感到徘徊的其他人,此问题的解决方案在于为gtk.MessageDialog构造指定父值。 如果你在你的班级使用glade gui,并且你的glade 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
答案 1 :(得分:2)
我没有机会尝试这个,但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
答案 2 :(得分:0)
如果尚未显示您的父窗口,也就是说,如果要在类(您的类,而不是“父”窗口类)的实例化过程中显示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...