python - Python中Tkinter中的滚动条仅在悬停时有效
问题描述
我对 Python 3 中的 tkinter 有点陌生,我正在尝试创建一个滚动条来处理标签和单选按钮等许多小部件。到目前为止我所做的工作,但只有当我悬停滚动条时滚动才有效。我想让它在窗口的任何地方工作。
我在Tkinter 滚动条中发现另一个帖子没有滚动与我相同的问题,但尝试解决方案并没有解决我的问题。
这是我正在尝试制作的一个非常简单的示例
import tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root)
scrolly = tk.Scrollbar(root, orient='vertical', command=canvas.yview)
for i in range(60):
label = tk.Label(canvas, text=i)
canvas.create_window(0, 20 * i, window=label)
canvas.configure(scrollregion=canvas.bbox('all'), yscrollcommand=scrolly.set)
canvas.pack(fill='both', expand=True, side='left')
scrolly.pack(fill='y', side='right')
root.mainloop()
我希望能够滚动页面而不必将鼠标悬停在滚动条上
提前感谢您的帮助
解决方案
def _on_mousewheel(event):
canvas.yview_scroll(int(-1*(event.delta/120)), "units")
canvas.bind_all("<MouseWheel>", _on_mousewheel)
这与鼠标滚轮一起使用
https://stackoverflow.com/a/17457843/7590574
另一个想法:
import tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root)
scrolly = tk.Scrollbar(root, orient='vertical', command=canvas.yview)
pressedY = 0
def mouse_pressed(e, label):
pressedY = e.y
print('p',e, label)
def mouse_released(e, label):
print('r',e, label)
def mouse_motion(e, label):
m = pressedY - e.y
# print('m',e, label)
canvas.yview_scroll(int(-1*(m/50)), "units")
labelList = []
for i in range(60):
labelList.append(tk.Label(canvas, text=i))
canvas.create_window(0, 20 * i, window=labelList[i])
labelList[i].bind("<Button-1>",lambda e,i=i:mouse_pressed(e, labelList[i]))
labelList[i].bind("<ButtonRelease-1>",lambda e,i=i:mouse_released(e, labelList[i]))
labelList[i].bind("<B1-Motion>",lambda e,i=i:mouse_motion(e, labelList[i]))
canvas.configure(scrollregion=canvas.bbox('all'), yscrollcommand=scrolly.set)
canvas.pack(fill='both', expand=True, side='left')
scrolly.pack(fill='y', side='right')
root.mainloop()
推荐阅读
- php - 响应式文件管理器未在 TinyMCE 上显示图像
- sql - 如何使用分隔符查找字符串的子字符串及其在 Oracle SQL 中的出现?
- python - find() 文本 message.content python 不和谐
- r - 带有R的emmeans函数中的specs参数
- python - Django 管理模板覆盖问题
- ios - IOS 模拟器延迟在 React Native 中加载新页面
- c++ - OpenCV SVM - 获取多类分类中的类数
- c# - 如何在asp net mvc中同时运行两个函数而不互相暂停
- r - 如何分析我在系统发育树的每个尖端都有多个个体的数据的特征?
- linux - 从两个不同的接口合并 tcpdump