gpt4 book ai didi

python - tkinter Canvas 方法与 Text .see() 相似

转载 作者:太空宇宙 更新时间:2023-11-04 10:00:06 28 4
gpt4 key购买 nike

我有一个充满按钮的 Canvas,我将其 ID 存储在字典中。 Canvas 很长,带有垂直滚动条。有一种方法可以自动将 View 定位在给定的按钮上吗?

当使用 Text 时,txt.see(position) 通常有效,但我看到 Canvas 没有 see

唯一可能的选择似乎是 .focus(),但是 cv.focus(ID) 似乎并没有做我想做的事

最佳答案

没有现成的功能可以做到这一点,但您可以使用 yview_moveto(fraction) 实现一个功能,其中 fraction 是 Canvas 的顶部部分设置屏幕外。因此,yview_moveto(0) 显示 Canvas 顶部,yview_moveto(1) 显示底部。

我们需要计算将显示由 iid 标识的按钮的分数 y/hh 是 Canvas 内容的高度,y 是按钮在 Canvas 中的高度。我使用 Canvas 边界框计算了它们:

def show(iid):
bbox = canvas.bbox('all')
h = bbox[3] - bbox[1]
y = canvas.coords(iid)[1] - bbox[1]
canvas.yview_moveto(y/h)

下面是一个小示例,在条目中键入按钮 ID(介于 1 和 20 之间),然后单击“显示”以移动 View 以查看它。

import tkinter as tk

def show(iid):
bbox = canvas.bbox('all')
h = bbox[3] - bbox[1]
y = canvas.coords(iid)[1] - bbox[1]
canvas.yview_moveto(y/h)

root = tk.Tk()

canvas = tk.Canvas(root, bg='white')
canvas.pack(fill='both', expand=True)
e = tk.Entry(root)
e.pack()
tk.Button(root, text='Show', command=lambda: show(e.get())).pack()

buttons = {}

for i in range(1, 21):
b = tk.Button(canvas, text='Button %i' % i)
iid = canvas.create_window(0, 30*i, anchor='nw', width=70, height=30, window=b)
buttons[iid] = b
canvas.configure(scrollregion=canvas.bbox('all'))

root.mainloop()

关于python - tkinter Canvas 方法与 Text .see() 相似,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43996020/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com