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

标签 python windows gtk pygtk

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/

相关文章:

使用 Eclipse + PyDev 在 Linux 中进行 Python Gtk+ 开发, Unresolved 导入 : Gtk

python - 有没有办法为基于平台的 Python 应用程序提供条件 requirements.txt 文件?

python - 无法在运行时修改 mapred.job.name。它不在允许在运行时修改的参数列表中

c# - 防止 Windows 工作站(桌面)在运行 WPF 程序时锁定

c# - 如何连接 Youtube 视频(Flash Player?)以减慢播放速度?

python - 如何使用 Python 和 GTK 创建具有自定义文本和透明背景的状态图标/系统托盘图标?

python - 演示如何使用 boto3 从 S3 存储桶中删除一个或多个特定 key

python - 使用python将大文件下载到谷歌云存储

windows - 无法使用 AutoHotkey 按住某个键

python - 在 pygtk 中设置 appindicator 的工具提示