如何在屏幕上锚定 Tkinter 窗口(不可移动窗口)

2024-04-30

我正在尝试在特定位置打开 tkinter,如果它是不可移动的,那就更好了。我搜索文档和其他内容,但没有找到任何相关内容。 最好的方法是将顶部或底部固定在一个位置 x、y,如果需要,我可以调整窗口大小。

def my_functions():
    print('task done')
    ws.after(1000, my_functions)

ws.after(1000, my_functions())

在 Windows 下,我更喜欢在用户尝试重新定位窗口时禁用该窗口,但显然这不是跨平台选项。另一种选择是使用 overrideredirect 标志来中止移动。只是将窗口重新定位到所需的位置就会导致整个屏幕闪烁。使用 overrideredirect,您仍然会遇到闪烁,但在同一位置,这给我一种尝试访问 MS-Windows 上禁用的窗口的感觉,其中它们blink窗户。

请注意,此代码应该在边缘情况下使用,例如模态窗口 https://en.wikipedia.org/wiki/Modal_window。它通常被认为是烦人的(!),但对于仅在需要时出现的关键错误/消息,您可以而且也许应该能够做到这一点。

该技术的解释更深入一些:

  • 当用户尝试重新定位窗口时会触发配置事件
  • The sequence surpress_move is called and checks the event details to match the specific case we are looking for:
    1. 第一个条件调用的小部件不是根窗口的子窗口,它必须是根窗口
    2. x 和 y 细节与我们指定的不同。
  • 我们将 overrideredirect 标志设置为 true,这会导致未装饰的窗口(没有标题栏),因此没有移动,因为操作系统窗口管理器不再管理移动。
  • 我们将窗户重新定位回我们想要的位置并再次装饰窗户。

这是代码:

import tkinter as tk

XCOORD = 0
YCOORD = 0

def surpress_move(event):
    if event.widget == root:
        if event.x != XCOORD or event.y != YCOORD:
            #event.widget.attributes('-disabled',True) #winows only
            event.widget.overrideredirect(True)
            event.widget.geometry(f'+{XCOORD}+{YCOORD}')
            event.widget.overrideredirect(False)
            #event.widget.attributes('-disabled',False)
    

root = tk.Tk()
root.bind('<Configure>',surpress_move)
root.mainloop()

如果您想使用 tkinter 锚定常量,您可以执行以下操作:

import tkinter as tk

root = tk.Tk()

def get_anchor_coords(anchor):
    if anchor in ('NW',tk.NW):
        return 0,0
    elif anchor in ('NE',tk.NE):
        return root.winfo_screenwidth-root.winfo_width(),0
    ###for South you should find the workspace or a constant for the taskbar
    elif anchor in ('SW', tk.SW):
        return 0,root.winfo_screenheight()-root.winfo_height()
    elif anchor in ('SE', tk.SE):
        return (root.winfo_screenwidth-root.winfo_width(),
               root.winfo_screenheight()-root.winfo_height())
    else:
        raise ValueError(f'anchor: {repr(anchor)}, not recognized!')

def surpress_move(event, anchor):
    if event.widget == root:
        xy = event.x,event.y
        anchor_coords = get_anchor_coords(anchor)
        if xy != anchor_coords:
            #event.widget.attributes('-disabled',True)
            event.widget.overrideredirect(True)
            event.widget.geometry(f'+{anchor_coords[0]}+{anchor_coords[1]}')
            event.widget.overrideredirect(False)
            #event.widget.attributes('-disabled',False)
    


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

如何在屏幕上锚定 Tkinter 窗口(不可移动窗口) 的相关文章

  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc

随机推荐

  • 在 Golang Server 中接受持久的 tcp 连接

    我正在尝试使用 Go 并且想创建一个 TCP 服务器 我可以通过 telnet 访问该服务器 发送命令并接收响应 const CONN HOST localhost CONN PORT 3333 CONN TYPE tcp func mai
  • Linux 中 NDIS 过滤器的类似物是什么?

    我正在研究一个as close to real time我在linux中尽可能地使用系统 并且需要在收到特定数据包后立即发送大约600 800字节的TCP数据包 为了获得最佳的延迟 我希望这个数据包直接从内核发送 而不是将接收到的数据包一直
  • 在 LibGDX 中保存和检索图像文件

    如何在 LibGDX 中保存和检索图像文件 我想将图像文件保存在 AndroidApplication 类的本地存储中 并在我的 Core 项目中检索它 Libgdx 中的文件处理在libGDX 维基 https github com li
  • 如何获取字段类型的零值

    我有一个包含许多字段的结构 我已经弄清楚如何使用反射提取字段名称 值和标签信息 我还想做的是确定字段的值是否与字段的默认值不同 目前 我有这个 有效 但有点臭 qsMap make map string interface var defa
  • Android WebView无法正确显示网页

    我有这样的简单 WebView 代码 WebView wv WebView findViewById R id webview1 wv loadUrl http en wikipedia org wiki Book 但显示的页面显示维基百科
  • R 在警告后执行某些操作(例如 tryCatch 警告,然后编辑对象)

    我正在运行一堆 logit 模型 其中一些模型具有完美的分离 会返回 glm 警告 这是显示问题的数据集 DT lt iris str DT DT binary lt as numeric DT Petal Width gt 1 DT du
  • 删除不需要的空行 Eclipse 编辑器

    当我在 eclipse 中打开任何文件时 它在所有代码行和空白行之后显示替代空白行 我怎样才能删除它 In eclipse preference setting you can remove all the unwanted blank l
  • 多种语言如何在一个项目中交互?

    我听说有些人在一个项目中使用多种语言进行编程 我无法想象这些语言如何相互作用 我的意思是没有像这样的Java方法 myProgram callCfunction parameters 从来没有发生过还是我错了 在一个项目中使用多种语言实际上
  • 在具有多个 Web 服务器的现有 .NET / SQL Server 堆栈上实施 Lucene

    我想考虑使用 Lucene 为我当前管理的网站提供全文搜索解决方案 该网站完全基于 SQL Server 2008 C NET 4 技术构建 我要索引的数据实际上非常简单 每个记录只有几个字段 并且只有其中一个字段实际上是可搜索的 我不清楚
  • 将自定义信息添加到 CSPROJ 文件

    作为我们开发生命周期的一部分 我们在项目中针对 C 源代码运行了许多流程 这些进程由 GUI 驱动 该 GUI 当前读取 csproj 文件以查找项目中使用的源文件 这很好用 我们现在有一个新要求 即提供一些需要调用 Web 服务的验证过程
  • 在嵌套有序字典 python 中查找给定键的值

    我试图从嵌套的 OrderedDict 中查找给定键的值 关键点 我不知道这个字典会嵌套多深 我正在寻找的键的名称是不变的 它将位于字典中的某个位置 我想返回本例中名为 powerpoint color 的键的值 mydict Ordere
  • Powershell/PowerCLI 循环、超时和退出

    以下是场景 我通过 Powershell PowerCLI VMwares Powershell 模块 远程启动虚拟机 一旦虚拟机启动 我将针对虚拟机运行一系列 cmdlet 目前我有这段代码 Start VM my VM Name run
  • 继续在文件的同一行写入

    我已经使用以下命令打开了要写入的文件 data open input a 使用循环 我想在同一行中向文件写入一些单词 在每次循环迭代之后我想添加一个换行符 while loop for loop do something if some c
  • 如何创建自定义主题并在 Android 应用程序中使用它?

    如何创建自定义主题并在代码中使用它 菜单中如何实现主题选项并申请活动 有一个不错的风格和主题指南 http developer android com guide topics ui themes html在 Android 开发者网站上
  • Nuget:packages.config 中的 属性的用途是什么?

    我将我的 C 项目 已经有一些 nuget 包 从 4 0 升级到 4 5 2 我看到有些
  • 覆盖主干“设置”方法

    我想重写骨干集方法 以便每当我为骨干模型设置一个值时 都会调用在该属性上注册的回调 而无需检查该属性的相同先前值 var model Backbone Model extend defaults prop1 true var view Ba
  • 使用反射检查java中的字段是否为final

    我正在编写一个类 它在某些时候必须拥有它的所有内容Fields 从该类的另一个项目分配 我通过反思做到了 for Field f pg getClass getDeclaredFields f set this f get pg 问题是 这
  • 如何在首选项标头中使用 PreferenceFragmentCompat

    我正在尝试学习在 Xamarin Android 应用程序中构建首选项页面的方法 我发现了很多 PreferenceFragment 的例子 但它被标记为已弃用 我在现阶段很难重写它们 我创建了代表标题的活动 我添加了 IntentFilt
  • iTextSharp 居中对齐文档对象内的对象

    是否有一种快速而简单的方法可以将文档对象中的对象居中对齐 Without执行任何计算逻辑 即 获取页面宽度 获取内容宽度 除以二等 我在 Document 对象内的 Paragraph 对象中有一个 PdfPTable 对象 我想将段落对象
  • 如何在屏幕上锚定 Tkinter 窗口(不可移动窗口)

    我正在尝试在特定位置打开 tkinter 如果它是不可移动的 那就更好了 我搜索文档和其他内容 但没有找到任何相关内容 最好的方法是将顶部或底部固定在一个位置 x y 如果需要 我可以调整窗口大小 def my functions prin