如何将一个独立的窗口定位在屏幕上的精确位置?

2024-03-22

我实际上正在开发一个相对复杂的 GTK+2 应用程序。 我的应用程序显然有一个主窗口;然后我需要打开一个新的“独立”窗口。

我需要将“飞行”窗口放在 * 中precise屏幕的准确位置*在顶点 of a widget(绘图区域)。 我需要将新窗口放置在屏幕的精确位置,恰好位于小部件(gtk.DrawingArea)的顶点处。

所以我想到了以下算法:

  1. I get 顶点坐标绘图区域(相对于父窗口);

  2. 然后,我转换相对坐标以获得绝对坐标在屏幕上;

  3. 最后,我可以简单地将窗口移动到屏幕上所需的位置,即 gtk.DrawingArea 的顶点。 这样对吗?

不幸的是,我无法将这个算法翻译成代码。 附注我正在与Python 2.7 and Gtk+2.24;尽管如此,C/C++ 示例也很受欢迎。


我不确定这是否是你想要的,尝试一下:

#!/usr/bin/env python3


from gi.repository import Gtk


class Demo:

    def __init__(self):
        self.window = Gtk.Window()
        self.window.set_title('Demo')
        self.window.set_default_size(300, 300)
        self.window.set_border_width(5)
        self.window.connect('delete-event', self.on_app_exit)

        hbox = Gtk.Box()
        hbox.set_halign(Gtk.Align.CENTER)
        hbox.set_valign(Gtk.Align.CENTER)
        self.window.add(hbox)

        da = Gtk.DrawingArea()
        da.set_size_request(100, 100)
        hbox.pack_start(da, False, False, 5)

        button = Gtk.Button('Show')
        button.connect('clicked', self.on_button_clicked, da)
        hbox.pack_start(button, False, False, 5)

        self.second_win = Gtk.Window()
        self.second_win.set_title('flying window')
        # You may also want to remove window decoration.
        #self.second_win.set_decorated(False)

        label = Gtk.Label('second window')
        self.second_win.add(label)


    def run(self):
        self.window.show_all()
        Gtk.main()

    def on_app_exit(self, widget, event=None):
        Gtk.main_quit()

    def on_button_clicked(self, button, da):
        allocation = da.get_allocation()
        self.second_win.set_default_size(allocation.width, 
                allocation.height)
        pos = self.window.get_position()
        self.second_win.move(pos[0] + allocation.x, pos[1] + allocation.y)
        self.second_win.show_all()


if __name__ == '__main__':
    demo = Demo()
    demo.run()

以及截图:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将一个独立的窗口定位在屏幕上的精确位置? 的相关文章

  • 如何在ubuntu 15.04中安装poppler?

    Poppler 是一个基于 xpdf 3 0 代码库的 PDF 渲染库 我已经从官方网站下载了 tar xz 文件http poppler freedesktop org http poppler freedesktop org 但我不知道
  • Android 小部件刷新

    我已经实现了一个小部件 但刷新它时遇到问题 我会得到最初的 onUpdate 如果我将其放置很长时间 则会再次得到 不过 我希望主应用程序中的更改能够自动反映在小部件上 我如何让它刷新 有没有办法从我的活动中调用小部件 我只是执行静态例程
  • GTK 窗口运动动画?

    我想自动在屏幕上移动我的 GTK WINDOW 目前我将它置于绘制 移动循环中 但这非常不稳定 我对 GTK 编程 以及一般的 gui 编程 非常陌生 我缺少什么 您还没有说您希望窗口遵循什么样的路径 如果路径是时间的一些简单函数 也就是说
  • 如何针对 gtk 3 库运行 javaFx 应用程序?

    如何强制 javaFx 应用程序使用 gtk3 库 我知道SWT允许设置SWT GTK3 1用于此目的的环境变量 javaFx 是否有类似的可能性 解决方法 新功能 8087516 对 Linux 上的 GTK 3 有条件支持 https
  • 闪亮的滑块限制释放鼠标左键的反应

    我正在使用 Shiny 应用程序 其中可能需要一些时间才能将滑块设置为正确的值 因此 在尝试将滑块设置为正确的值 并且不释放鼠标左键 时 即我的本地 服务器观察到几个新值并做出相应反应 由于我的服务器对任何新值的响应可能需要几秒钟 如果我可
  • 升级到 ubuntu 11.10 unity 后,monodevelop 中的 Gtk# 不再工作

    我有一些带有 GTK 用户界面的 monodevelop 程序 可以在 ubuntu 11 04 中顺利运行 无需统一 我已经统一升级到ubuntu 11 10 现在我收到以下错误 找不到类型或命名空间名称 Gtk 您是否缺少程序集引用 事
  • 在 Qt 中将多个小部件合并为一个

    我反复使用一对QComboBox and QListWidget在一个项目中 它们的交互是高度耦合的 当在组合框中选择一个项目时 列表会以某种方式进行过滤 我在多个对话框实现中复制粘贴这两个小部件之间的所有信号和插槽连接 我认为这不是一个好
  • 如何使用 css 代码单独设置 gtk 小部件的样式

    在这之后GTK 将字体更改为旋转按钮 https stackoverflow com questions 47083294 gtk change font to spin button和这个为什么 CSS 样式没有应用于 GTK 代码 ht
  • 如何从 GTK Builder 检索对象的名称? [复制]

    这个问题在这里已经有答案了 如何获取从 Builder 对象检索的 Gtk Widget 的名称 我特指的是在 Glade 中看到的名字 例如 button1 而不是类的名称 GtkWindow 这个问题与this one https st
  • android appwidget listview不更新

    我编写了一个 AppWidget 它在 ListView 中显示来自 ContentProvider 的一些数据 但我在更新它时遇到了问题 当我第一次创建小部件时 它会正确填充 但在 AlarmManager 的 PendingIntent
  • 在 GtkGrid c 中插入空行

    如何在 GtkGrid 中保留空行 我想创建一个带有按钮的 gtkgrid 如示例所示 0 1 2 3 0 button2 button1 1 button3 2 button4
  • android widget id 仅适用于当前widget

    我可以获取当前的 widgetId 吗onUpdate 的方法AppWidgetProvider 我发现很多关于发送的帖子appWidgetId在意图字段中 但我不明白在发送之前我必须在哪里获取它 我没有找到在没有配置活动的情况下仅获取当前
  • 按 HOME 按钮不会从配置活动返回小部件 ID

    Error appWidgetId EXTRA APPWIDGET ID was not returned from the widget configuration activity public class WidgetConfigur
  • 如何在小部件中使用列表视图? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试创建一个从 rss feed 加载到小部件中的列表视图 有谁知道如何在小部件中使用列表视图的教
  • 在 Windows 上安装 MonoDevelop:满足 Gtk# 要求的解决方法?

    我已经安装了Mono 版本2 11 4 在我的Windows 7系统上 现在我打算安装单一开发 版本 3 0 4 7 然而 当我开始单一开发安装程序我收到以下错误消息 并且安装终止 好的 这可以通过获取轻松解决Gtk 安装程序来自here
  • 如何在 Windows 中使用 cmake 更轻松地链接 gtk 库?

    我现在通过手动包含所有必需的路径 gtk包位于D Tools gtk bundle 2 20 0 20100406 win32 include directories D Tools gtk bundle 2 20 0 20100406 w
  • 使用 Python/PyGObject 在 Windows 中加载 GTK-Glade 翻译

    我有一个 Python 脚本 可以加载可翻译的 Glade GUI 在 Linux 下一切工作正常 但我在理解 Windows 上的必要步骤时遇到了很多困难 Linux 下似乎需要的只是 import locale locale setlo
  • 删除 Android 小部件时根本不会调用 onDeleted、onDisabled

    似乎这已经让人痛苦了一段时间了 在 SO 和网上做了相当多的研究 简而言之 android 文档指出 onReceive 将在所有其他生命周期方法调用之前调用 onDeleted 将在删除小部件时调用 onDisabled 将在最后一个小部
  • 如何在 iOS8 上以编程方式创建一个没有 Storyboard 的 Today 小部件?

    我尝试删除故事板文件和相关的Info plist进入但这次扩展停止工作 它甚至不能从 XCode 启动 The operation couldn t be completed LaunchServicesError error 0 在常规应
  • 在主屏幕上创建文件夹,我可以在其中放置一些图标在网格中

    在Android中我想做主屏幕上的文件夹以编程方式喜欢清理大师为游戏助推器所做的事情谷歌也将其所有应用程序放在一个文件夹中 我尝试使用 Live 文件夹 但它已被弃用 并且在最新的 Android 版本中也不适用于我 它是一个小部件还是我无

随机推荐

  • 如何将 openssl-sys 箱静态链接到共享库?

    我正在使用一个依赖于的库openssl 系统 https github com sfackler rust openssl 根据文档 如果我指定OPENSSL STATIC 1作为环境变量 OpenSSL 将静态链接到共享库输出中 Due
  • WinForms 多线程:仅当前一个更新完成时才执行 GUI 更新

    我有带有一些后台处理的多线程应用程序 它有长时间运行的 UI 更新 在 UI 线程本身上 它们是通过众所周知的从后台线程调用的MSDN 上的资源 http msdn microsoft com en us library 757y83z4
  • 用颜色填充图像但保留 Alpha(PIL 中的颜色叠加)

    基本上 我正在尝试创建一个函数来获取给定的图像和颜色 对于图像中的每个像素 它将保留原始 alpha 值 但会将颜色更改为给定的颜色 例如 如果函数获取下面的箭头图像和红色 它将输出以下图像 在 Photoshop 和其他图像编辑器中 这种
  • 从函数创建矩阵

    我想从函数创建一个矩阵 这样 3 3 如果行索引小于给定阈值 k 则矩阵 C 的值等于 1 import numpy as np k 3 C np fromfunction lambda i j 1 if i lt k else 0 3 3
  • “NSPercientContainer”仅在 iOS 10.0 或更高版本上可用

    我是 iOS 应用程序开发新手 我开发了一个应用程序 在用户登录时显示一个网站 它适用于设置为 10 1 的部署目标 为了使其与 IOS 8 兼容 我尝试将部署目标设置为 8 因为我遇到了以下错误 NSPersistentContainer
  • 控制线段

    这是一个简单的问题 我一直在成功使用 d3 svg line 生成器 但我现在需要能够对整条线中的每个单独段进行更多控制 例如 每个部分可能需要不同的颜色 或者每个片段甚至可能需要不同的厚度 根据相邻片段的厚度逐渐变细或变细 我想知道实现这
  • TFS 中的搁置是什么?

    在 TFS 中搁置仅仅是一种软签入 以便其他团队成员可以看到源代码吗 即搁置的代码不会被编译 对吗 货架有很多用途 主要有 上下文切换 保存当前任务的工作 以便您可以切换到另一个高优先级任务 假设您正在开发一项新功能 只顾自己的事 这时您的
  • 什么是 := 运算符?

    在某些编程语言中 我看到 例如 x y 这是什么 运算符通常被称为 它有什么作用 在所有支持运算符的语言中 这意味着分配 在支持运算符的语言中 the 运算符通常表示相等比较 在语言中 意味着赋值 通常用于相等比较 does mean 我不
  • javascript:动态更改名称属性

    我正在处理这个脚本 它没有错误 但我想在上面添加一些功能 就像当我单击它添加的按钮时一样 但我希望输入文本的名称属性也被更改 这是我的脚本 javascript var a 1 function add var fContent docum
  • 有没有办法使用 Selenium Webdriver (firefox) 记录 http 请求/响应?

    有没有办法使用 Selenium Webdriver firefox 记录 http 请求 响应 我想可以通过代理驱动网络流量并记录它 但也许有更简单的 内部 硒解决方案 在 selenium 频道上问了这个问题 您将需要代理它来捕获请求
  • Android Intent:发送带有附件的电子邮件

    我想通过电子邮件发送多个文件 我找到了这个Android 使用 Intent 实现多个电子邮件附件 https stackoverflow com questions 2264622 android multiple email attac
  • 打印从根节点到叶节点的所有路径 - javascript

    function formCategoryTrees object each object function objectValues var leafCategoryId objectValues id var leafCategoryN
  • 什么是SOA(面向服务的架构)?

    如果你愿意的话 可以叫我巨魔 但我是认真的 新的 SOA 趋势与我 15 年前构建的客户端服务架构究竟有何不同 我一直听到 SOA 但我不明白它与我们一直以来所做的有什么不同 早在 10 年前 我的公司就有多个客户 使用多种语言 使用相同的
  • Visual Studio 中的递归

    当我运行这个非常简单的递归代码时 我发现当函数 recursCheck 使用整数参数时 我的内存在 Win32 模式下跳到 200 MB 在 x64 模式下跳到 45 MB 并且当参数的类型为 short Win32 模式使用的内存为 4
  • cx_Oracle - DLL 加载失败

    我在使用 Python 导入 cx Oracle 时遇到问题 我知道这里已经讨论了 cx Oracle 的很多问题 但在阅读所有相关主题后 我似乎找不到解决我的问题的方法 我有两台机器 一台是我的计算机 另一台是远程工作站 它们具有相似的配
  • SQLDependency -- 无效的 SQL

    我能看出的最好的here http msdn microsoft com en us library ms181122 28SQL 105 29 aspx 我没有违反此查询的任何规则 但更改事件不断触发 状态无效 SELECT COUNT
  • 如何在测试期间在 Helper 中存根函数

    看看这个辅助函数 def show welcome banner controller name competition action name index controller name submissions action name s
  • 如何使用blueimp jquery上传插件获取每个块的md5迭代md5和

    我需要计算迭代的 md5 哈希值并将其发送到我的 upload api 但我不知道怎么办 我正在使用这里找到的教程 http tutorialzine com 2013 05 mini ajax file upload form http
  • 如何排除 Maven 继承的子依赖项中的父 pom 依赖项?

    我在父 pom 中有一个版本为 2 3 的 Jackson 在我的子 pom 中我需要版本 2 9 有什么方法可以排除父 pom 依赖项吗 您可以使用 dependencyManagement 部分覆盖依赖项的版本
  • 如何将一个独立的窗口定位在屏幕上的精确位置?

    我实际上正在开发一个相对复杂的 GTK 2 应用程序 我的应用程序显然有一个主窗口 然后我需要打开一个新的 独立 窗口 我需要将 飞行 窗口放在 中precise屏幕的准确位置 在顶点 of a widget 绘图区域 我需要将新窗口放置在