如果你想用滚动条滚动而不是缩放滚动,你应该使用两个单独的窗口。我不知道你说的“和你平常看到的不一样”是什么意思。如果您将两个画布并排放置,中间没有空格,并且背景颜色相同,那么用户将无法知道您同时在使用两个画布小部件。在
tkinter画布可以滚动几千个项目,然后开始变得迟钝,所以很难说没有看到您的实际代码。在
下面是一个绘制10000个点的示例,比例在一个单独的画布中:import Tkinter as tk
from random import randrange
class Example(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.DrawArea = tk.Canvas(self, width=1000, height=600, background="black",
borderwidth=0, highlightthickness=0)
self.scale = tk.Canvas(self, width=30, height=600, background="black",
borderwidth=0, highlightthickness=0)
self.hsb = tk.Scrollbar(self, orient="horizontal", command=self.DrawArea.xview)
self.vsb = tk.Scrollbar(self, orient="vertical", command=self.DrawArea.yview)
self.DrawArea.configure(yscrollcommand=self.vsb.set, xscrollcommand=self.hsb.set)
self.DrawArea.grid(row=0, column=0, sticky="nsew")
self.scale.grid(row=0, column=1, sticky="nsew")
self.vsb.grid(row=0, column=2, sticky="ns")
self.hsb.grid(row=1, column=0, columnspan=2,sticky="ew")
self.grid_rowconfigure(0, weight=1)
self.grid_columnconfigure(0, weight=1)
self.draw_scale()
self.draw_points()
def draw_scale(self):
value = 5.0
for y in range(25, 600, 25):
self.scale.create_text((25, y), text=str(value), fill="white", anchor="ne")
value -= 0.5
def draw_points(self):
import math
for x in range(5,10000):
y = randrange(600)
color = "green" if (300 > y > 200) else "red"
self.DrawArea.create_rectangle(x-2,y-2,x+2,y+2, fill=color)
self.DrawArea.configure(scrollregion = self.DrawArea.bbox("all"))
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()