2014-01-05 2 views
0

Я занимался поиском прокрутки на моем графике данных. У меня там есть и прокрутка данных, но и прокрутка шкалы (значений данных) в правой части экрана. Сегодня утром я начал играть с идеей создания двух отдельных окон, один для графика данных и один для шкалы. Это выглядит довольно необычно по сравнению с тем, что вы обычно видите, но я замечаю одно, особенно, когда я это делаю. С масштабом на графике данных, одним gui, прокрутка очень медленная, пока масштаб все еще остается на экране. Как только масштаб сдвинется с экрана, скорость прокрутки зависит от того, что я обычно ожидаю. Когда я перемещаю масштаб на совершенно отдельный ги, скорость прокрутки постоянно прекрасна. Как мне решить эту проблему?Python tkinter scrollbar/scale scale замедляет прокрутку

Я не уверен, почему весы оказывают какое-либо влияние на скорость прокрутки. Это не более, чем:

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.Я довольно новичок в этом, поэтому мой lingo не самый лучший :) – confused

+0

вы не можете иметь два экземпляра 'Tk' в одной программе - это вызовет всевозможные неожиданные проблемы. –

ответ

0

Если вы хотите прокручивать полосу прокрутки и не иметь прокрутки шкалы, вам, вероятно, следует использовать два отдельных окна. Я не уверен, что вы подразумеваете под «необычным по сравнению с тем, что вы обычно видите». Если вы помещаете два холста бок о бок без пространства между ними и с тем же фоновым цветом, пользователь не будет знать, что вы одновременно используете два виджета холста.

Холст 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() 
+0

Я обновил исходное сообщение, чтобы добавить дополнительную информацию. – confused

+0

@confused: я обновил свой ответ, чтобы показать пример –

+0

Спасибо за обновление. Я попробую, когда вернусь домой. Я не буду писать до завтра, но я вижу, о чем вы говорите .grid. Я до сих пор недостаточно играл с различными функциями Tkinter, но я видел достаточно .grid. Как ни странно, в предыдущих версиях программы я использовал 2 Tk экземпляра, и это никогда не вызывало у меня никаких проблем. Я только прекратил использовать его, чтобы попытаться сократить код (создавал тот же макет дважды в двух случаях, эта идея может работать намного лучше), и я хотел бы расширить основную высоту Tk, чтобы я потерял второй экземпляр Tk. – confused

Смежные вопросы