2015-06-19 3 views
0

Я пытаюсь создать полосу прокрутки для окна, созданного в моем gui, используя tk.Toplevel. Кадр в настоящее время часто заполняется длинными сетками строк, которые добавляются к одной покупке. Остальная часть GUI позволяет пользователю писать в ряд полей, которые отображаются один за другим с использованием сетки.scrollbar для рамки меток в tkinter

Эти данные могут выглядеть примерно так:

SADAS sfafaf fsaafads fdsafsf dfsfdsf fssfs fsfsfsfs fsfsfs sfsfsfs fsssfsfsf

SADAS sfafaf fsaafads fdsafsf dfsfdsf fssfs fsfsfsfs fsfsfs sfsfsfs fsssfsfsf

SADAS sfafaf fsaafads fdsafsf dfsfdsf fssfs fsfsfsfs fsfsfs sfsfsfs fsssfsfsf

Я использовал этот пост: Adding a scrollbar to a group of widgets in Tkinter как руководство, чтобы добраться до места, где я сейчас. В настоящее время, когда я открываю окно, полоса прокрутки появляется с левой стороны. Как только я добавляю строку, GUI замерзает, и я должен закрыть его.

Вот соответствующий код:

class data_popup(): 
    def __init__(self, parent): 
     self.parent = parent 
     self.top = tk.Toplevel(parent) 
     self.top.title("Current Data") 
     self.top.protocol('WM_DELETE_WINDOW', self.stop_close) 
     #Frames 
     self.header_labels_frame = tk.Frame(self.top) 
     self.header_labels_frame.pack(side = tk.TOP) 
     self.data_frame_1 = tk.Frame(self.top) 
     self.data_frame_1.pack(side = tk.BOTTOM)   
     self.header_labels_list = [] 


     self.data_canvas = tk.Canvas(self.data_frame_1, borderwidth = 0) 
     self.data_frame = tk.Frame(self.data_canvas) 
     self.scrollbar = tk.Scrollbar(self.data_frame, orient = 'vertical', command = self.data_canvas.yview) 
     self.data_canvas.configure(yscrollcommand = self.scrollbar.set) 
     self.scrollbar.pack(side = 'right', fill = 'y') 
     self.data_canvas.pack(side = "bottom", fill = 'both', expand = True) 
     self.data_canvas.create_window((4,4), window = self.data_frame, anchor = 'nw', tags = "self.frame") 
     self.data_frame.bind("<Configure>", self.myfunction) 
     self.create_header() 
     self.data_row_list = list() 

    def myfunction(self, event): 
     self.data_canvas.configure(scrollregion=self.data_canvas.bbox("all")) 
+0

Отступ кода неверен. –

+1

_ «Как только я добавляю строку, GUI замерзает, и я должен ее закрыть». _ Вы не используете «сетку» и «пакет» в том же окне и/или кадре, не так ли? Это заставляет Tkinter вводить бесконечный цикл. – Kevin

+0

Отступы в моем редакторе нормальны, он просто скопирован неправильно. Я починю это. – DustySack

ответ

1

Часто, когда GUI зависает в порядке, вы описали, это потому, что вы используете как grid и pack в том же кадре. Вы не показываете код, в который вы добавляете что-то в фрейм, но я предполагаю, что это то, что происходит.

+0

Вы правы! Я - метки, использующие сетку. Как добавить холст к кадру с сеткой вместо пакета? (Как и в каких должно быть значения строки/столбца) – DustySack

+0

Полоса прокрутки и холст в настоящее время используют пакет. Поэтому мне нужна сетка для полосы прокрутки. – DustySack

+0

Создание обеих сетки (используется строка = 0, столбец = 0) для предотвращения сбоев, но это изменяет отображение. Вместо строк каждый раз, когда я пытаюсь написать, он просто отображает одну точку на строку. Полоса прокрутки также исчезает, когда я пишу строку и снова появляется, если я удалю их все. – DustySack

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