2014-01-05 119 views
0

我一直在將滾動條放在我的數據圖上。我在那裏,它滾動數據,但它也滾動屏幕右側的比例(數據值)。今天早上我已經玩過了創建兩個獨立窗口的想法,一個用於數據圖表,另一個用於比例。它與你通常看到的相比看起來很不尋常,但當我這樣做時,我特別注意到一件事。隨着數據圖上的比例,一個gui,只要比例仍然保留在屏幕上,滾動速度非常緩慢。一旦標尺離開屏幕,滾動速度就會達到我通常所期望的水平。當我將刻度移動到一個完全獨立的GUI時,滾動速度一直很好。我如何克服這個問題?Python tkinter滾動條/圖形比例放慢滾動

我不確定爲什麼刻度對滾動速度有任何影響。這無非是:

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

下降的屏幕(是5〜-5標示出每家每戶.125 ...標記一次.5)。

將尺度和圖形數據放在同一個gui上仍然可以保持滾動速度。我沒有改變字體,無論是大小還是類型,因爲我不知道如何去做,因爲tkinter文檔中沒有任何內容。

也有一種方法可以限制圖形數據的顯示位置。使用一個gui,我有1350x615的圖形設置(600,底部15是滾動條)。 1300應該是顯示數據,其他50是比例尺。現在我有一個問題,就是數據在規模下面被繪製(規模顯然是放在最後)。有什麼辦法可以限制它,所以數據只顯示0-1300,而比例顯示1301-1350?今天早上我一直在和Frames一起玩耍,但是迄今爲止我還沒有運氣來解決這個問題。

編輯: 當我試圖使用鍵盤進行滾動時,我使用.move()命令,但是當我改變使用滾動條時,我並沒有使用鍵盤,只是使用滾動條。只要屏幕上顯示比例(尚未滾動),當我在同一個GUI上同時顯示圖形和比例時,圖形在整個屏幕上移動非常緩慢。一旦它離開屏幕,節奏就開始移動,就好像我根本沒有屏幕上的比例。當我使用兩個獨立的窗口進行測試時,情況也是如此。主圖上的比例放慢了向下滾動。

將刻度移動到另一個gui仍然無助於顯示圖形的加載速度或放大/縮小速度。

+0

當你說「移動規模,另一個鬼」是沒有意義的。在這種情況下什麼是「gui」? 「Toplevel」的一個實例? –

+0

我做的是:root = Tk(),root2 = Tk()。這就是我的意思是另一個gui。我對此很新,所以我的行話並不是最好的:) – confused

+0

在單個程序中不能有兩個'Tk'實例 - 這會導致各種意想不到的問題。 –

回答

0

如果您想使用滾動條進行滾動並且沒有縮放滾動條,則應該使用兩個單獨的窗口。我不確定你的意思是「與通常看到的不同」。如果您將兩個畫布並排放置,並且它們之間沒有空間並且背景顏色相同,則用戶無法同時知道您正在使用兩個畫布小部件。

tkinter canvas可以在數千個項目開始變慢之前滾動,因此很難說沒有看到您的實際代碼。

這裏,在一個單獨的畫布上繪製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() 
+0

我更新了原文,添加了一些額外的細節。 – confused

+0

@confused:我已更新我的答案以顯示示例 –

+0

感謝您的更新。當我回家後,我會嘗試一下。我將無法發佈到明天,但我確實能夠看到.grid所指的是什麼。我還沒有玩過足夠多的Tkinter的不同功能,但我已經看到了.grid就夠了。奇怪的是,在早期的程序中,我使用了2個Tk實例,它從來沒有給我帶來任何麻煩。我只是停止使用它來縮短代碼(在兩個實例中兩次創建相同的佈局,這個想法可能會更好),我想擴大主Tk高度,所以我失去了第二個Tk實例。 – confused