我有一个包含一些小部件的 tkinter PanedWindow,我希望用户能够将每个分隔符拖动到某个位置,当他们松开鼠标按钮时,分隔符应该“捕捉”到列表中最近的位置我给程序的位置/比例。例如,假设我有一个包含两个按钮的 PanedWindow,我希望用户能够调整按钮的大小,使它们的比例为 1/4:3/4、1/2:1/2 或 3/4:1/4 不仅仅是用户选择的任何宽度。有什么办法可以做到这一点? 带有两个按钮的 PanedWindow 代码:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry("400x400")
pw = tk.PanedWindow(root)
buttons = [ttk.Button(text=message) for message in ["goose", "duck"]]
for button in buttons:
pw.add(button)
pw.pack(expand=True, fill="both")
root.mainloop()
有没有办法指定分隔符可以对齐的比例?
允许的位置:
调整大小时,按钮应吸附到最近的这些位置。
最佳答案
您可以通过绑定(bind) <ButtonRelease-1>
来做到这一点到计算最近点的函数。然后您可以使用此信息并使用 PanedWindow.sash_place(index, x, y)
更新窗扇位置.
这是一个最小的例子:
import tkinter as tk
from tkinter import ttk
def snap(event):
width = pw.winfo_width()
closest = min([width//2, width//4, width*3//4], key=lambda w: abs(w - event.x))
pw.sash_place(0, closest, 1)
root = tk.Tk()
root.title("snappy")
pw = tk.PanedWindow(root)
buttons = [ttk.Button(text=message) for message in ["goose", "duck"]]
for button in buttons:
pw.add(button)
pw.pack(expand=True, fill="both")
pw.bind("<ButtonRelease-1>", snap)
root.mainloop()
关于python - 将 PanedWindow 分隔符 "snap"放置到某些位置,而不是只允许用户选择任何随机位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69000928/