Python tkinter滚动条/图形缩放减慢滚动

2024-09-27 07:28:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在玩在我的数据图表上放一个滚动条。我把它放在那里,它在滚动数据,但它也在屏幕右侧滚动刻度(数据值)。今天早上我一直在考虑创建两个单独的窗口,一个用于数据图,另一个用于刻度。和你平常看到的相比,这看起来很不寻常,但我确实注意到一件事,特别是当我这样做的时候。有了数据图上的刻度,一个图形用户界面,只要刻度仍然显示在屏幕上,滚动就非常慢。一旦刻度移离屏幕,滚动速度就会回升到我通常预期的水平。当我把刻度移到一个完全独立的图形用户界面时,滚动速度一直都很好。我如何克服这个问题?在

我不知道为什么刻度对滚动速度有任何影响。只不过是:

self.DrawArea.create_line((1298, 12), (1300, 12), fill = "white")
self.DrawArea.create_line((1290, 25), (1300, 25), fill = "white")
self.DrawArea.create_line((1298, 37), (1300, 37), fill = "white")
self.DrawArea.create_text((1320, 25), text = "5.0", fill = 'white')
self.DrawArea.create_text((1320, 50), text = "4.5", fill = 'white')
self.DrawArea.create_text((1320, 75), text = "4.0", fill = 'white')

进入屏幕(是的,每.125标记一次…每.5标记一次)。在

在同一个图形用户界面(gui)上同时保持滚动速度是可行的。我没有改变字体,无论是大小或类型,因为我不知道如何改变,因为在tkinter文档中没有真正指明。在

还有一种方法可以限制图形数据的显示位置。有了一个gui,我就有了1350x615的图形设置(600,底部15是滚动条)。1300应该是显示数据,其他50是刻度。现在我有一个问题,数据是在刻度下绘制的(很明显,比例尺放在最后)。我有什么办法可以限制它,使数据只显示0-1300,而刻度显示1301-1350?今天早上我也在玩弄相框,但到目前为止我还没有解决这个问题的运气。在

编辑时间: 当我试图使用键盘进行滚动时,我使用的是.move()命令,但当我改为使用滚动条时,我根本没有使用键盘,而是使用滚动条。当我把图形和比例都放在同一个图形用户界面上时,只要刻度在屏幕上(还没有滚动),图形在屏幕上移动的速度非常慢。一旦它离开屏幕,速度加快,移动,好像我根本没有在屏幕上的规模。当我用两个独立的窗口测试时也是这样。主图形上的比例会减慢滚动速度。在

不过,将缩放比例移动到另一个gui仍然无助于提高显示图形的加载速度或放大/缩小速度。在


Tags: 数据textself图形屏幕createlinegui
1条回答
网友
1楼 · 发布于 2024-09-27 07:28:57

如果你想用滚动条滚动而不是缩放滚动,你应该使用两个单独的窗口。我不知道你说的“和你平常看到的不一样”是什么意思。如果您将两个画布并排放置,中间没有空格,并且背景颜色相同,那么用户将无法知道您同时在使用两个画布小部件。在

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()

相关问题 更多 >

    热门问题