pygtk: как заставить диалоги сообщений отображаться в центре экрана? - PullRequest
4 голосов
/ 24 декабря 2009

У меня есть графический интерфейс glade, и я использую купольные gtk.MessageDialog виджеты, созданные с помощью pygtk для взаимодействия с пользователем. Моя проблема в том, что всякий раз, когда я выкидываю диалоговое сообщение на экран, они появляются повсюду. Один может появиться в верхнем правом углу, следующий слева внизу, вверху слева, в середине слева и т. Д. ...

Есть ли способ заставить эти вещи отображаться в центре экрана или в позиции, где находится родительское окно?

Ответы [ 2 ]

5 голосов
/ 24 декабря 2009

Неважно. Нашел решение.

Для тех, кто может побродить по тому же вопросу, решение этой проблемы заключается в указании родительского значения для конструкции gtk.MessageDialog. Если вы используете Glade GUI в своем классе, и ваш XML Glade загружается в переменную с именем «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
2 голосов
/ 24 декабря 2009

Проверьте справочный материал на PyGTK 2.0 Справочное руководство

У меня не было возможности попробовать это, но 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 
...