gpt4 book ai didi

python - 使用PyGTK/win32,如何在其父窗口附近放置一个新窗口,但不在屏幕外?

转载 作者:可可西里 更新时间:2023-11-01 10:50:57 25 4
gpt4 key购买 nike

pygtk在windows上运行时,我希望在父窗口附近弹出一个新窗口,但不要离开屏幕。
我在Windows7和WindowsXP中都观察到了我想要的微软写字板的行为。如果将窗口缩小并移动到桌面右下角,在文本字段中单击鼠标右键,然后打开“段落”菜单,则弹出的对话框将完全可见。即使写字板窗口部分离开屏幕,也会发生这种情况。子对话框不会在相对于主窗口的固定位置弹出。它只是近距离弹出,完全可见。
我的应用程序由一个主屏幕组成,该主屏幕生成子窗口,这些子窗口在用户完成使用之前阻止应用程序的其余部分。用户可能必须按顺序打开和关闭许多子窗口,因此我希望它们出现在单击按钮的位置附近,这样用户就不必将鼠标移到屏幕上。
我试过使用gtk.win_pos_鼠标,但当主菜单靠近屏幕边缘时,生成的子窗口通常会部分离开屏幕。
我希望在子窗口上调用set_transient_for(主菜单)会通知窗口我希望我的窗口靠近其父窗口。然而,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_窗口在屏幕外部分显示。
如果您注释掉w.set_position行(gtk.win_pos_center_on_parent),您将看到windows窗口管理器仅将子窗口放置在桌面的最左上角。不是很有用!
有没有一种方法可以在不使用手动管理窗口位置的情况下获得所需的行为,方法是检查窗口的最终位置,然后将窗口移动到完全脱离屏幕的位置?
更新:
我在2011年2月23日为pygtk提交了一个bug报告: http://bugzilla.gnome.org/show_bug.cgi?id=643138
它还没有得到开发人员或其他用户的任何回应。如果你有这个问题,请在这个错误上插嘴,以便它得到修复(或者我们可能得到一个解决办法)。

最佳答案

在我的Windows7系统中,弹出窗口出现在主窗口的中心。我有一个问题:你为什么用窗口而不是对话框?

关于python - 使用PyGTK/win32,如何在其父窗口附近放置一个新窗口,但不在屏幕外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3587947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com