You need to enable JavaScript to run this app. Tkinter应用启动后按钮不显示,使用.place放置到self.frame问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter应用启动后按钮不显示,使用.place放置到self.frame问题求助

错误点说明
  • 菜单配置逻辑错误:master.configure(menu=self) 写法不符合tkinter规范,menu参数需要传入Menu实例,此处传入WindowMain类实例会直接抛出异常,中断组件初始化流程;同时菜单实例menuleiste的父容器设置为Frame,无法绑定到窗口顶部菜单栏,正确父容器应为根窗口master。
  • 回调引用指向错误:按钮command属性中写的lambda:[button_ust()],此处button_ust指向的是刚定义的局部按钮对象,不是类方法self.button_ust,按钮对象不可调用会触发运行时错误;另外button_bestand()没有对应的类方法定义,也会导致程序崩溃。
  • 子窗口方法调用错误:WindowUSt类中直接调用self.geometry()、self.resizable()属于错误用法,self是自定义类的实例,不是Toplevel窗口对象,需要通过持有窗口实例的self.master调用窗口相关方法。
  • 布局管理器冲突:WindowUSt类中给fileButton同时调用了pack()和place()两种布局方法,同一个组件只能使用一种布局管理器,冲突会导致组件无法渲染。
  • 组件父容器非法:WindowUSt类中定义fileButton时传入的父容器是self,父容器必须是tkinter原生容器类对象(Tk、Frame、Toplevel等),自定义类实例不能作为组件父容器。
修正后可运行代码
import tkinter as tk

class WindowMain:
    def __init__(self, master):
        self.master = master
        self.frame = tk.Frame(self.master, width=550, height=280)
        # 修正菜单父容器和配置逻辑
        menuleiste = tk.Menu(master)
        datei_menu = tk.Menu(menuleiste, tearoff=0)
        datei_menu.add_command(label="Einlesen", command=self.button_ust)
        menuleiste.add_cascade(label="Datei", menu=datei_menu)
        master.configure(menu=menuleiste)
        
        # 修正回调指向,新增缺失的bestand按钮方法引用
        button_ust = tk.Button(self.frame, text='Umsatz/Steuer\n Auswertung', command=self.button_ust, bg='#393939', fg='white')
        button_ust.place(x = 60, y = 40, width=200, height=75)
        bestand_button = tk.Button(self.frame, text='Lagerbestand\n auswerten', command=self.button_bestand, bg='#393939', fg='white')
        bestand_button.place(x = 290, y = 40, width=200, height=75)
        
        self.frame.pack()

    def button_ust(self):
        self.button_ust_win = tk.Toplevel(self.master)
        self.app = WindowUSt(self.button_ust_win)
    
    # 补全缺失的库存按钮方法
    def button_bestand(self):
        # 可根据需求补充逻辑
        pass
        
class WindowUSt:
    def __init__(self, master):
        self.master = master
        self.frame = tk.Frame(self.master, width=400, height=100)
        # 修正窗口方法调用
        self.master.geometry('400x100')
        self.master.resizable(False,False)
        # 修正父容器和布局冲突
        fileButton = tk.Button(self.frame, text='Datei suchen')
        fileButton.place(x=280, y=22, height=40, width=100)
        self.frame.pack()
        
def main():
    root = tk.Tk()
    app = WindowMain(root)
    root.geometry('550x280')
    root.resizable(False,False)
    root.mainloop()
    
if __name__ == '__main__':
    main()

内容的提问来源于stack exchange,提问作者For My

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 17:33:02