Я новичок в 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. Глядя на примеры сетевого менеджера, я видел, что некоторые программы включают пакет, а другие - нет.