强制 TkInter Scale 滑块捕捉到鼠标

2024-01-19

当 GUI 有 TkInter 时Scale当他们单击刻度上的某个位置时,默认行为似乎是沿着刻度向鼠标方向滑动滑块(然后意外地经过鼠标)。

我想要的是让滑块在用户单击滑块上的任意位置时始终跳转到并保持连接到用户的鼠标点。如果他们单击刻度上的特定点,滑块应直接跳转到该点。

我下面有一些代码尝试执行此操作,但似乎不起作用,而且我找不到原因。

import tkinter as tk
from tkinter import ttk

def show_values():
    print('w1 set to',w1.get())

def snapToVal1(val):
    scaleVal = float(w1.get())
    if int(scaleVal) != scaleVal:
        w1.set(round(float(val)))

def scaleFunc1(event):
    g = w1.grid_info()
    w1.set(round(8 * (event.y - g['pady'])/(w1.winfo_height() - 2*g['pady'] - 2*g['ipady']))-1)
    print('w1 set to',w1.get())

#---
root = tk.Tk()

f1 = ttk.Frame(root, relief = tk.GROOVE)

ttk.Label(f1, text='Stellar\nType').grid(row=0,column=0, columnspan=2,padx=2,pady=2)

for i,text in enumerate(['O','B','A','F','G','K','M','L']):
    ttk.Label(f1, text = text).grid(row=i+1,column=0,pady=5,padx=(2,0))

w1 = ttk.Scale(f1, to=7, command=snapToVal1, orient=tk.VERTICAL)
w1.grid(row = 1, column = 1, rowspan = 8, pady=5, padx=2, sticky='nsew')
w1.bind('<Button-1>',scaleFunc1)

f1.grid(row = 0, column = 0,padx=(2,1),pady=2,sticky='nsew')

ttk.Button(root, text='Show', command=show_values).grid(row=1,column=0)

root.mainloop()

这里的相关函数是scaleFunc1。这个想法是每当用户在秤上按下鼠标按钮时就调用它。然后,它尝试根据事件像素位置和比例大小计算点击在比例上的小数位置,将其转​​换为比例值,并将其设置为用户单击的值。但是,我发现滑块并不总是跳到同一位置,即使它报告它已设置为我期望的值。这是怎么回事?

我怀疑这与用户按住鼠标按钮的几分之一秒内幻灯片仍在尝试移动有关。


这实际上是默认的右键单击行为。如果您想让左键单击也执行此操作,那么最简单的方法就是简单地检测左键单击并告诉 tkinter 这是右键单击:

import tkinter as tk
from tkinter import ttk

class Scale(ttk.Scale):
    """a type of Scale where the left click is hijacked to work like a right click"""
    def __init__(self, master=None, **kwargs):
        ttk.Scale.__init__(self, master, **kwargs)
        self.bind('<Button-1>', self.set_value)

    def set_value(self, event):
        self.event_generate('<Button-3>', x=event.x, y=event.y)
        return 'break'

def show_values():
    print('w1 set to',w1.get())

root = tk.Tk()

f1 = ttk.Frame(root, relief = tk.GROOVE)

ttk.Label(f1, text='Stellar\nType').grid(row=0,column=0, columnspan=2,padx=2,pady=2)

for i,text in enumerate(['O','B','A','F','G','K','M','L']):
    ttk.Label(f1, text = text).grid(row=i+1,column=0,pady=5,padx=(2,0))

w1 = Scale(f1, to=7, orient=tk.VERTICAL)
w1.grid(row = 1, column = 1, rowspan = 8, pady=5, padx=2, sticky='nsew')

f1.grid(row = 0, column = 0,padx=(2,1),pady=2,sticky='nsew')

ttk.Button(root, text='Show', command=show_values).grid(row=1,column=0)

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

强制 TkInter Scale 滑块捕捉到鼠标 的相关文章

  • pip 安装最新的依赖版本

    当我使用安装包时pip install e 它仅安装不满足的依赖项并忽略依赖项升级 如何在每次运行时安装最新的依赖版本pip install e 我尝试过使用pip install upgrade e 但是使用这个选项没有任何改变 我仍然得
  • 从 Python 中的 message_from_string() 获取发件人地址

    有人可以告诉我如何在Python中从email message from string 获取发件人地址吗 谢谢 我试过 message email message from string email text from message Fr
  • setColumnStretch 和 setRowStretch 如何工作

    我有一个使用构建的应用程序PySide2它使用setColumnStretch用于柱拉伸和setRowStretch用于行拉伸 它工作得很好 但我无法理解它是如何工作的 我参考了 qt 文档 但它对我没有帮助 我被困在括号内的两个值上 例如
  • Django 营业时间

    我想添加诊所的营业时间 我已经对此进行了调查在 Django 中实现 开放时间 的任何现有解决方案 https stackoverflow com questions 8128143 any existing solution to imp
  • 使用 keras 澄清 Yolo v3 模型输出

    我将 yolo v3 模型与 keras 一起使用 该网络为我提供了形状如下的输出容器 1 13 13 255 1 26 26 255 1 52 52 255 所以我找到了这个link https www cyberailab com ho
  • 如何在Python中反转列表的列表? [复制]

    这个问题在这里已经有答案了 我想知道如何反转 python 中的列表列表 例如 原来的 list 1 2 3 4 5 6 7 8 9 输出 new list 7 8 9 4 5 6 1 2 3 现在 我正在尝试这样做 new list re
  • MacOS Big Sur 中的 NPM 错误“找不到 Python 可执行文件”

    我已经花了整整一周的时间寻找这个问题的答案 但没有成功 我查看了每个 StackOverflow 帖子 Google 的每一篇文章以及我能找到的每个相关的 Github 问题 大多数相关错误似乎都比较旧 所以我想知道我的问题是否由于我使用的
  • 让 python 脚本打印到终端而不作为标准输出的一部分返回

    我正在尝试编写一个返回值的 python 脚本 然后我可以将其传递给 bash 脚本 问题是我想要在 bash 中返回一个单一值 但我想要一些东西一路打印到终端 这是一个示例脚本 我们称之为 return5 py usr bin env p
  • 将 numpy 数组及其大小写入二进制文件

    我需要将 2D numpy 数组写入文件 包括其尺寸 以便我可以从 C 程序中读取它并创建相应的数组 我编写了一些简单的代码来保存数组 并且可以从 C 读取它 但是如果我尝试先写入数组的大小 它总是会给我一个错误 这是我的简单 python
  • 如何检查给定的数字是否是2的幂?

    下面的代码不适用于某些输入 a i set 1 while i lt 10000 a add i i lt lt 1 N int input if N in a print True else print False 我最初的想法是检查每个
  • Python SQLite3 SQL注入漏洞代码

    我知道下面的代码片段由于 format 的原因很容易受到 SQL 注入的攻击 但我不知道为什么 有谁明白为什么这段代码容易受到攻击以及我从哪里开始修复它 我知道这些代码片段使输入字段保持打开状态 以便通过 SQL 注入执行其他恶意命令 但不
  • pandas DataFrame 中行的高效成对比较

    我目前正在处理一个较小的数据集 大约 900 万行 不幸的是 大多数条目都是字符串 即使强制类别 框架在内存中也只有几 GB 我想做的是将每一行与其他行进行比较 并对内容进行直接比较 例如 给定 A B C D 0 cat blue old
  • 关于具有自定义损失的 3 输出 ANN 的加权

    我正在尝试定义一个自定义损失函数 它在回归模型中接收 3 个输出变量 def custom loss y true y pred y true c K cast y true float32 Shape batch size 3 y pre
  • 按升序对数字字符串列表进行排序

    我创建了一个SQLite https en wikipedia org wiki SQLite数据库有一个存储温度值的表 第一次将温度值按升序写入数据库 然后 我将数据库中的温度值读入列表中 然后将该列表添加到组合框中以选择温度 效果很好
  • Plotly:如何设置文本格式(下划线、粗体、斜体)

    使用注释时 我尝试在绘图中为文本添加下划线 我使用添加注释 import plotly graph objects as go g go FigureWidget make subplots rows 1 cols 1 g update l
  • Python 模块 BeautifulSoup 提取锚点 href

    我正在使用 BeautifulSoup 模块通过以下方式从 html 选择所有 href def extract links html soup BeautifulSoup html anchors soup findAll a print
  • 如何停止 PythonShell

    如何终止 停止 Node js 中 PythonShell 执行的 Python 脚本的执行 我在交互模式下运行 输出通过 socket io 发送到给定的房间 如果没有更多的客户端连接到这个房间 我想停止 python 脚本的执行 这是我
  • 类型错误:无法连接“str”和“int”对象有人可以帮助新手使用他们的代码吗?

    感谢任何帮助 还有任何重大缺陷或您在格式或基本方面看到的任何重大缺陷 请指出 谢谢 day raw input How many days locations raw input Where to days str day location
  • 哈希 freezeset 与排序元组

    在 Python 中 给定一组可比较的 可散列的元素s 散列是否更好frozenset s or tuple sorted s 这取决于你在做什么 创建一个更快frozenset 比排序tuple but frozenset占用的内存比tu
  • 如何从 Pandas 数据框函数调用中回顾之前的行?

    我正在研究 回测交易系统 我有一个包含 OHLC 数据的 Pandas 数据框 并添加了几个计算列 https stackoverflow com questions 12376863 adding calculated columns t

随机推荐

  • 在 Rails 模型中;保存到数据库时,符号会自动转换为 YAML。正确的做法是什么?

    在我的模型示例游戏中 有一个状态列 但我通常通过使用符号来设置状态 例子 self status active MATCH STATUS betting on gt Betting is on home team won gt Home t
  • Firefox 的 execCommand 复制异步替代方案

    document execCommand copy 可以在 Promise 的解析函数中使用 Firefox 除外 Chrome Opera 甚至 Safari 等所有现代浏览器都允许最多 1 秒的异步复制 我想改善用户体验并在剪贴板中计算
  • 使用 HDFS 更改更新 Hive 外部表

    可以说 我从文件 myFile csv 位于 HDFS 中 创建了 Hive 外部表 myTable myFile csv 每天都会更改 那么我也有兴趣每天更新一次 myTable 是否有任何 HiveQL 查询告诉每天更新表 谢谢 P S
  • AddEntityFrameworkStores 只能由派生自 IdentityUser 的用户调用

    我正在尝试为我的网络应用程序创建一些角色 但由于以下原因它并没有真正起作用Tkey exception 如果您投赞成票 我很高兴 这样其他需要帮助的人就可以更多地看到它 我不知道如何解决它 我认为我的 Startup cs 有问题 无论我尝
  • 将其他计费注册字段与 WooCommerce 中的默认 Wordpress 字段同步

    我已将以下代码添加到 Woocommerce 用户注册表中 以获取注册页面上的账单详细信息 现在当新用户注册时会发生什么 名字和姓氏将在账单详细信息数据库以及默认 WordPress 用户帐户中注册 如果用户更新其帐户 wordpress
  • Git 强制覆盖本地跟踪文件,但不覆盖本地未跟踪文件

    我正在一个名为的本地目录中工作p1其中包含一个 git 存储库 添加分支并对添加的分支进行提交后 我制作了目录的副本p1并称之为p2 我的目的是在目录中尝试合并和变基 只是为了学习 p2 同时从p1当我决定如何合并 重新调整我的更改时 但是
  • 插入符号交叉验证中的预处理

    我有一个关于数据预处理的问题需要澄清 据我了解 当我们通过交叉验证调整超参数并估计模型性能时 我们需要在交叉验证中进行 而不是预处理整个数据集 换句话说 在交叉验证中 我们对训练折叠进行预处理 然后使用相同的预处理参数来处理测试折叠并进行预
  • .NET 示例 VCF 阅读器

    有谁知道使用 C NET 从 VCF 文件中提取数据的好示例 内联回复或网络教程 现在还有人用VCF文件吗 对于联系人管理系统来说 这值得吗 让我有点惊讶的是 它没有内置到 NET Framework 的任何地方 但我确实找到了本教程 我计
  • 将 ExpandoObject 持久保存到 MongoDB

    我有一个具有任意数量属性的 ExpandoObject 我想将这些属性作为 BsonDocument 保存到 MongoDB 数据库 我尝试使用以下代码来执行此操作 private BsonDocument GetPlayerDocumen
  • 如何在 onStart() 方法中从 Firebase 远程配置实现 fetch() ?

    我正在尝试实现调用 Firebase 远程配置fetch 中的方法onStart 我以为这会很容易 但经过几次尝试后却发现并非如此 首先 我想尽快检查新的配置值用户打开应用程序 and 超出缓存过期时间 这就是我选择的原因onStart 方
  • 如何禁用/关闭/刷新 couchdb 缓存

    我有一个列表 其中对文档进行了一些基本身份验证 我遇到的问题是列表正在缓存 因此除非我更新修订 ID 否则用户将看不到他们具有访问权限 如何显示非缓存列表 if req userCtx name doc permissions owner
  • 最小化二分图中的交叉数

    在为不相关的东西绘制图表时 我遇到了以下算法问题 我们有一个二部图的平面图 其中不相交的集合按列排列 如图所示 我们如何重新排列每列内的节点以使边缘交叉的数量最小化 我知道这个问题对于一般图来说是 NP 困难的 link http en w
  • 调试使用 ES6 模块的 JavaScript 代码

    TL DR 如何从调试器访问 ES 模块中定义的变量 函数 名称 更多背景信息 我是一位经验相对丰富的 JavaScript 程序员 但对模块还是个新手 我已经按照 MDN 上的教程进行操作 https developer mozilla
  • CUDA 就地转置错误

    我正在实现一个 CUDA 程序来转置图像 我创建了 2 个内核 第一个内核进行了异位转置 并且适用于任何图像尺寸 然后我创建了一个用于方形图像就地转置的内核 但是 输出不正确 图像的下三角形被转置 但上三角形保持不变 生成的图像在对角线上有
  • 如何在 android room 和 rxjava 2 中插入数据并获取 id 作为输出参数?

    插入查询 Insert onConflict OnConflictStrategy REPLACE long insertProduct Product product product id is auto generated 查看模型 p
  • tvos UISegmentedControl 焦点样式不改变

    我想在 tvOS 中突出显示 UISegmentedControl 时更改其背景颜色 Normally Segment display like following When change focus for change selected
  • 训练神经网络时出现极小或 NaN 值

    我正在尝试在 Haskell 中实现神经网络架构 并在 MNIST 上使用它 我正在使用hmatrix线性代数包 我的训练框架是使用pipes包裹 我的代码可以编译并且不会崩溃 但问题是 层大小 例如 1000 小批量大小和学习率的某些组合
  • 如何将 DATETIME 转换为 mysql 中的 DATE?

    我的查询是这样的 我有一堆条目 我想按日期对它们进行分组 但我的数据库中没有日期 而是有一个日期时间字段 我该怎么办 select from follow queue group by follow date cast follow dat
  • 反序列化 JSON 对象的一部分并将其序列化回来,其余属性保持不变

    我有一些 JSON 想要将其反序列化为 C 类的实例 但是 该类并不具有与原始 JSON 匹配的所有字段 属性 我希望能够修改类中的属性值 然后将其序列化回 JSON 并且原始 JSON 中的剩余字段和属性仍然完好无损 例如 假设我有以下
  • 强制 TkInter Scale 滑块捕捉到鼠标

    当 GUI 有 TkInter 时Scale当他们单击刻度上的某个位置时 默认行为似乎是沿着刻度向鼠标方向滑动滑块 然后意外地经过鼠标 我想要的是让滑块在用户单击滑块上的任意位置时始终跳转到并保持连接到用户的鼠标点 如果他们单击刻度上的特定