Как исправить 'Невозможно использовать сетку менеджера геометрии внутри. который уже имеет рабов, управляемых пакетом - PullRequest
0 голосов
/ 23 января 2019

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

В моем главном окне я попытался удалить строку self.pack, но в моем главном окне ничего не появилось. После удаления я попытался вызвать self.grid, и все обнаружилось, но не в правильных положениях (все они были зажаты в верхнем левом углу). Я думаю, что происходит из-за того, что строка self.pack вызывает проблемы в новом окне, но я не уверен, что это является причиной проблемы. Если это так, я не понимаю, почему.

Вот главное окно

class Window(Frame):
    #constructor
    def __init__(self,master = None):
        Frame.__init__(self,master)
        self.master = master

        self.init_window()

    #create the window
    def init_window(self):
        self.master.title("Japanese Word A Day")

        #configure the grid
        self.columnconfigure(1,weight=1)
        self.rowconfigure(1,weight=1)

        #configure the view history button
        view_button = Button(self, text="View\nSaved Words", command=self.view_history)
        view_button.grid(column=3,row=5)

        #fill the window - without this line, nothing shows up
        self.pack(fill=BOTH, expand=1)

    def view_history(self):
        self.h_window = Toplevel(self.master)
        history = History(self.h_window)   

Вот новое окно

class History(Frame):
    def __init__(self,master):
        Frame.__init__(self,master)
        self.master = master
        self.init_window()

    def init_window(self):
        self.master.title("Japanese Word A Day - History")
        self.master.geometry("600x600")

        headers = ("English","Kanji","Kana","Romaji","Pronunciation")
        self.tree = ttk.Treeview(columns=headers,show="headings")

        self.y_scroll = ttk.Scrollbar(orient=VERTICAL,command=self.tree.yview)
        self.tree['yscroll'] = self.y_scroll.set

        self.rowconfigure(0,weight=1)
        self.columnconfigure(0,weight=1)

        self.tree.grid(row=0,column=0,sticky=NSEW)
        self.y_scroll.grid(row=0, column=1,sticky=NS)

Вот код, который создает главное окно

root = Tk()
root.geometry("400x300")
app = Window(root)
root.mainloop()

Это в Python 3.6.8. Глядя на примеры сетевого менеджера, я видел, что некоторые программы включают пакет, а другие - нет.

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