Почему Tkinter зависает при упаковке полосы прокрутки? - PullRequest
3 голосов
/ 24 октября 2011

Я пытаюсь прикрепить полосу прокрутки к списку в Tkinter, но всякий раз, когда код достигает одной из строк .pack (), он зависает ... есть идеи, почему?(Я экспериментировал с запуском примера кода, который делает то же самое, что я нашел в Интернете, и который работал нормально).

        #Read Box
    self.scrollbar = Tkinter.Scrollbar(self.frame)
    #self.scrollbar.pack(side=Tkinter.RIGHT, fill=Tkinter.Y)
    self.read = Tkinter.Listbox(self.frame, width=50, yscrollcommand=self.scrollbar.set)
    self.read.grid(row=1,column=2)
    #self.read.pack(side=Tkinter.LEFT, fill=Tkinter.BOTH)
    self.scrollbar.config(command=self.read.yview)

Есть идеи, почему этот код не работает?


Обновленный код:

        #Read Box
    self.scrollbar = Tkinter.Scrollbar(self.frame)
    self.scrollbar2.grid(sticky=Tkinter.N+Tkinter.S) #row=1, column=2 side=Tkinter.RIGHT, fill=Tkinter.Y

    self.read = Tkinter.Listbox(self.frame, width=50, yscrollcommand=self.scrollbar.set)
    self.read.grid(row=1,column=2) #side=Tkinter.LEFT, fill=Tkinter.BOTH

    self.scrollbar.config(command=self.read.yview)

Хорошо, это была небольшая ошибка (я перепутал полосы прокрутки и полосу прокрутки2).В любом случае, теперь у меня есть этот код:

        #Read Box
    self.scrollbar = Tkinter.Scrollbar(self.frame)
    self.scrollbar.grid(row=1, column=2)

    self.read = Tkinter.Listbox(self.frame, width=50, yscrollcommand=self.scrollbar.set)
    self.read.grid(row=1,column=2)

    self.scrollbar.config(command=self.read.yview)

Это не останавливается и появляется полоса прокрутки, но они не подключены (или не имеют никакого контроля) к списку.Что касается остального кода, то это все операторы сетки, без пакета.


Я обнаружил проблему, на полосе прокрутки отсутствовал sticky = Tkinter.N + Tkinter.S.Вот готовый код (с добавленными горизонтальными чертами).

        #Read Box
    self.scrollbar = Tkinter.Scrollbar(self.frame)
    self.scrollbar.grid(row=1, column=3, sticky=Tkinter.N+Tkinter.S)

    self.hbar = Tkinter.Scrollbar(self.frame, orient=Tkinter.HORIZONTAL)
    self.hbar.grid(row=2, column=2, sticky=Tkinter.E+Tkinter.W)

    self.read = Tkinter.Listbox(self.frame, width=50, yscrollcommand=self.scrollbar.set, xscrollcommand=self.hbar.set)
    self.read.grid(row=1,column=2)

    self.scrollbar.config(command=self.read.yview)
    self.hbar.config(command=self.read.xview)

1 Ответ

2 голосов
/ 24 октября 2011

Кажется, что вы смешиваете pack и grid на одном уровне (то есть не внутри двух отдельных Frame или еще).Это заставит ваше приложение зависнуть, как описано в документации.

Итак, вам нужно сделать .grid свою полосу прокрутки: -)

Больше материала: как сказано выше, вы можете смешиватьразные оконные менеджеры, но не внутри одного кадра.То, что ниже, является законным и будет работать:

from Tkinter import *
root = Tk()
f1 = Frame(root)
f1.pack()
Label(f1, text='some text').grid(row=0, column=0)
Button(f1, text='Button').grid(row=1, column=0)

f2 = Frame(root)
f2.pack()
Label(f2, text="content of Frame 2").pack()

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...