You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:13:08