![](/img/trans.png)
[英]How can i add RoundedRectangle as a background for vertical scroll bar?
[英]tkinter: How can I use one vertical scroll bar to scroll two canvases?
在我的 UI 中,我需要两个画布,每个画布都有自己的水平滚动条,但有一个滚动条控制两个画布的垂直移动。
以下代码创建两个画布,每个画布都有自己的水平和垂直滚动条。 如何摆脱垂直滚动条之一? 为代码的长度道歉,它尽可能规范。
from tkinter import *
from tkinter import ttk
class MainUI:
def __init__(self, root):
mainframe = Frame(root)
mainframe.grid(column=0, row=0, sticky=(N,W,E,S))
# set up the first canvas, with large red triangle
canvas1 = Canvas(mainframe, background="turquoise")
canvas1.grid(column=1, row=1, sticky=(N,S,W,E))
canvas1_hscroller = Scrollbar(mainframe, orient="horizontal",command=canvas1.xview)
canvas1_hscroller.grid(column=1, row=2, sticky=(W,E))
canvas1.configure(xscrollcommand=canvas1_hscroller.set)
canvas1_vscroller = Scrollbar(mainframe, orient="vertical",command=canvas1.yview)
canvas1_vscroller.grid(column=2, row=1, sticky=(N,S))
canvas1.configure(yscrollcommand=canvas1_vscroller.set)
points = [0,0,1000,800,800,1000]
triangle = canvas1.create_polygon(points,fill="red")
canvas1.configure(scrollregion=canvas1.bbox("all"))
# set up the second canvas, with large green triangle
canvas2 = Canvas(mainframe, background="orange")
canvas2.grid(column=3, row=1, sticky=(N,S,W,E))
canvas2_hscroller = Scrollbar(mainframe, orient="horizontal",command=canvas2.xview)
canvas2_hscroller.grid(column=3, row=2, sticky=(W,E))
canvas2.configure(xscrollcommand=canvas2_hscroller.set)
canvas2_vscroller = Scrollbar(mainframe, orient="vertical",command=canvas2.yview)
canvas2_vscroller.grid(column=4, row=1, sticky=(N,S))
canvas2.configure(yscrollcommand=canvas2_vscroller.set)
points = [0,0,1000,800,800,1000]
triangle = canvas2.create_polygon(points,fill="green")
canvas2.configure(scrollregion=canvas2.bbox("all"))
root = Tk()
ui = MainUI(root)
root.mainloop()
首先制作实例的画布属性:
...
self.canvas1 = Canvas(mainframe, background="turquoise")
...
self.canvas2 = Canvas(mainframe, background="orange")
并使用self.
在您之前引用canvas1
和canvas2
所有地方添加前缀
然后定义一个新方法
def v_scroll(self, *args):
self.canvas1.yview(*args)
self.canvas2.yview(*args)
然后只需将滚动条command
设置为该方法:
canvas_vscroller = Scrollbar(..., command=self.v_scroll)
此外,不要使用from tkinter import *
,导入模块时使用*
是不好的做法。 仅导入您需要的内容。 例如在这种情况下
from tkinter import Tk, Frame, Canvas, Scrollbar
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.