我是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中。通过在线查看网格管理器的示例,我已经看到一些程序包括该软件包,而另一些则没有。