[英]With PyGTK/win32, how do I place a new window near its parent but not off-screen?
在Windows上運行PyGTK的情況下 ,我希望在父窗口附近彈出一個新窗口,但不要在屏幕外顯示。
我在Windows 7和Windows XP的 Microsoft Wordpad中都觀察到了我想要的行為。 如果您使窗口很小,並將其移至桌面的右下角,請在文本字段中單擊鼠標右鍵,然后打開“ 段落”菜單,該對話框將完全可見。 即使“ 寫字板”窗口部分不在屏幕上,也會發生這種情況。 子對話框不會在相對於主窗口的固定位置彈出。 它只是近距離彈出,並且完全可見。
我的應用程序由一個主屏幕組成,該主屏幕會生成子窗口,這些子窗口會阻塞應用程序的其余部分,直到用戶完成使用它們為止。 用戶可能必須依次打開和關閉許多子窗口,因此我希望它們出現在單擊按鈕的位置附近,因此用戶不必將鼠標移到整個屏幕上。
我嘗試使用gtk.WIN_POS_MOUSE ,但是當主菜單靠近屏幕邊緣時; 產生的子窗口通常最終部分離開屏幕。
我希望在子窗口上調用set_transient_for(main_menu)會通知Windows我希望我的窗口位於其父窗口附近。 但是, Windows只是將其放在桌面的左上方-甚至不一定與主菜單位於同一屏幕上。
下面的代碼將通過在屏幕左下方彈出一個窗口來演示該問題,該窗口包含一個按鈕,單擊該按鈕可生成一個子窗口:
import gtk
class MyWindow(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
self.connect("delete-event",self.on_delete_event)
button = gtk.Button("Open Subwindow")
button.connect("clicked",self.open_sub_window)
self.add(button)
self.set_gravity(gtk.gdk.GRAVITY_SOUTH_EAST)
self.show_all()
width, height = self.get_size()
self.move(gtk.gdk.screen_width() - width, gtk.gdk.screen_height() - height)
def on_delete_event(self, widget=None, data=None):
gtk.main_quit()
def open_sub_window(self, widget=None, data=None):
w = gtk.Window()
w.set_size_request(200,200)
w.set_transient_for(self)
w.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
w.show()
if __name__=="__main__":
MyWindow()
gtk.main()
如您所見,sub_window在屏幕外部分顯示。 如果注釋掉w.set_position(gtk.WIN_POS_CENTER_ON_PARENT)行,您將看到Windows窗口管理器僅將子窗口放在桌面的左上角。 不是很有用!
有沒有一種方法可以通過不檢查窗口的最終位置,然后將窗口移到完全不在屏幕上的位置來手動管理窗口的位置,從而獲得所需的行為?
更新:我於2011年2月23日提交了pyGTK的錯誤報告: http ://bugzilla.gnome.org/show_bug.cgi?id=643138
它尚未收到開發人員或其他用戶的任何回復。 如果您遇到此問題,請及時解決該錯誤,以便對其進行修復(或使我們獲得解決方法)。
在我的Windows 7系統上,彈出窗口出現在主窗口的中央。 我有一個問題:您為什么要使用窗口而不是對話框?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.