Tkinter问题:点击按钮打开子窗口时标签显示在主窗口而非子窗口
问题原因
你创建子窗口的Label时,没有指定它的父窗口,Tkinter会默认把控件绑定到主窗口,所以标签才会错误地显示在主窗口里。
解决方法
在创建tk.Label时,通过master参数明确指定它的父窗口是子窗口实例的self.wind,就能让标签显示在目标子窗口中。
修正后的完整代码
import tkinter as tk class m_window: def __init__(self, window): self.wind = window self.wind.geometry('750x500') self.widgets() def widgets(self): new_transaction = tk.Button(text = 'New Transaction',width = 25, height = 3, command = lambda: s_window(tk.Tk())) new_transaction.pack(side = 'top', padx = 8, pady = 8) transaction_name = tk.Listbox(width = 80, selectbackground = "#00B9FF") transaction_name.pack(side = 'left', fill = 'both', padx = 2,) transaction_kind = tk.Listbox(width = 25, selectbackground = "#00B9FF") transaction_kind.pack(side = 'left', fill = 'both', padx = 2) transaction_amount = tk.Listbox(width = 20, selectbackground = "#00B9FF") transaction_amount.pack(side = 'left', fill = 'both', padx = 2) transaction_amount.insert(tk.END, "hOLA") class s_window: def __init__(self, swindow): self.wind = swindow self.wind.geometry('375x175') self.widgets2() def widgets2(self): # 关键改动:指定Label的父窗口为当前子窗口 self.label = tk.Label(master=self.wind, text = 'l') self.label.pack(side = 'left') obj_m_window = m_window(tk.Tk()) obj_m_window.wind.mainloop()
额外建议:Tkinter创建所有控件时,最好都明确指定父窗口,能避免很多类似的控件归属错误。
内容的提问来源于stack exchange,提问作者Kumar López
相关产品推荐
相关产品推荐

