在another post中,brianoakley提供了一些代码,99%的代码解决了我遇到的问题。当我运行代码时,除了一个小的异常,一切都运行得更好。图形不在正确的y位置。我想做的一切都没用。我被难住了。今天早上我终于找到了问题的答案,我不确定这是否是一个问题,很可能是框架问题,或者交易是什么。我在想,他们是否是解决问题的另一种方法,而不是先在屏幕上放一个虚拟点。在
在下面的代码中,如果删除def graph_data(self):
第一行中的#,则一切正常。当你在屏幕上画一个虚拟点时,直线不会出现在屏幕上的正确位置。是他们处理这件事的另一种方式,因为它似乎一直在发生。我在linux上运行这个程序,所以这可能是问题的一部分…谁知道呢。奇怪的是,在我的程序中,我首先打印刻度,它总是被正确地放置,但是当我去绘制数据时,横过屏幕的水平线永远不会在正确的位置打印出来,除非我先添加一个虚拟点。在
import tkinter as tk
class Example(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.DrawArea = tk.Canvas(self, width=1300, 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.graph_data()
def graph_data(self):
#self.DrawArea.create_line((0,0), (0,0), fill = "black")
self.DrawArea.create_line((0,250), (1000,250), fill = "white")
self.DrawArea.create_line((0,300), (2000,300), fill = "white")
self.DrawArea.configure(scrollregion = self.DrawArea.bbox("all"))
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
原因是这句话:
scrollregion定义了更大的虚拟画布的哪个部分可见,或者可以通过将其滚动到视图中而使其可见。它给出了一个矩形的边界,不一定要以0,0为根。在
上面的代码行将获得画布上所有项的边界框(“bbox”)。边界框从最左上角的项开始,在您的示例中是0250。创建“虚拟点”时,边界框从0,0*开始。在
您可以通过在设置scrollregion后添加以下行来查看:
^{pr2}$*您可能会注意到滚动区域被关闭了一两个像素。在我的机器上显示为-2 248 2002 302。这是因为
bbox
方法不是100%精确。有时为了表现,它会有一点矫揉造作。官方文件简单地说:如果你知道你的点数总是在0,0到300030000的范围内,你可以直接将scrollregion设置为这个值。使用bbox的结果只是表示“当前画布上的所有内容”的便捷快捷方式。在
在您的情况下,可以将configure语句更改为如下所示:
相关问题 更多 >
编程相关推荐