Python 2.7/Windows: как контролировать положение общих диалогов Tkinter?

Python 2.7 под Windows: как мы можем контролировать положение общих диалогов Tkinter?

Вот что мы обнаружили:

  • Некоторые общие диалоговые окна всегда открываются относительно их родительского окна.
  • Некоторые общие диалоговые окна всегда открываются по центру рабочего стола пользователя.
  • Все распространенные диалоги игнорируют необязательный параметр parent=

Вопросы:

  • Как мы можем заставить диалоговое окно открываться относительно его родительского окна?
  • Как мы можем заставить диалоговое окно открываться по центру рабочего стола пользователя?

Задний план:

import tkColorChooser as colorchooser
import tkFileDialog as filedialog
import tkMessageBox as messagebox

; # always open up relative to parent windows
fileOpen   = filedialog.askopenfilename()
fileOpens  = filedialog.askopenfilenames()
fileSaveAs = filedialog.asksaveasfilename()
color      = colorchooser.askcolor()

; # always open up centered on desktop
folderOpen = filedialog.askdirectory()
messagebox.askquestion()

Спасибо, Малькольм.


person Malcolm    schedule 22.10.2010    source источник


Ответы (1)


Для окна сообщений Windows вы не можете. Он появляется в центре экрана и все. Однако диалоговое окно выбора файла и средство выбора цвета являются системными диалоговыми окнами, которым была предоставлена ​​оболочка Tk, чтобы пользователи могли видеть стандартные диалоговые окна на этой платформе. Если вы установите параметр -parent, то это будет передано в обернутые окна, и оно будет центрировано над вашим назначенным верхним уровнем.

In Tk:

toplevel .t
tk_chooseColor -parent .t

Как вы превратите это в Tkinter, я оставляю для тех, у кого есть опыт работы с Python.

Что касается их центрирования, член hwndOwner структуры CHOOSECOLOR всегда устанавливается в HWND для одного из ваших верхних уровней Tk. Чтобы позволить ему быть родительским по отношению к рабочему столу, вам нужно передать туда NULL, а Tk не позволяет вам. Вместо этого вы можете получить версию unix (lib/clrpick.tcl) и показать ее, но тогда это будет выглядеть странно на рабочем столе Windows.

person patthoyts    schedule 05.03.2011