WeiHandsome 2024-06-09 13:13 采纳率: 85%
浏览 7

Python tkinter错误


import tkinter as tk
from tkinter import messagebox
from viewPage import AboutFrame,InsertFrame,QueryFrame,DeleteFrame,ModifyFrame
from databasePage import Database

class mainPageView():
    def __init__(self,master):
        self.root = master
        self.root.title("小程序")
        self.root.geometry("300x300")
        self.createPage()

#明明已经创建了这几个变量
        self.about_frame = AboutFrame(self.root).pack()
        self.insert_frame = InsertFrame(self.root)
        self.delete_frame = DeleteFrame(self.root)
        self.query_frame = QueryFrame(self.root)
        self.modify_frame = ModifyFrame(self.root)




    def createPage(self):

        self.menubar = tk.Menu(self.root,tearoff=0)
        self.menubar.add_command(label='录入',command=self.showInsert)
        self.menubar.add_command(label='查询',command=self.showQuery)
        self.menubar.add_command(label='删除',command=self.showDelete)
        self.menubar.add_command(label='修改',command=self.showModify)
        self.menubar.add_command(label='关于',command=self.showAbout)
        self.root.config(menu=self.menubar)

    def showInsert(self):
        messagebox.showinfo("录入")
        self.clearEffect()
        self.insert_frame.pack()

    def showQuery(self):
        messagebox.showinfo("查询")
        self.clearEffect()
        self.query_frame.pack()
    def showDelete(self):
        messagebox.showinfo("删除")
        self.clearEffect()
        self.delete_frame.pack()
    def showModify(self):
        messagebox.showinfo("修改")
        self.clearEffect()
        self.modify_frame.pack()
    def showAbout(self):
        messagebox.showinfo("关于")
        self.clearEffect()
        self.about_frame.pack()

    def clearEffect(self):
        self.insert_frame.pack_forget()
        self.modify_frame.pack_forget()
        self.about_frame.pack_forget()
        self.delete_frame.pack_forget()
        self.query_frame.pack_forget()




root = tk.Tk()
mainPageView(root)
root.mainloop()


Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\15856\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py", line 1948, in __call__
    return self.func(*args)
           ^^^^^^^^^^^^^^^^
  File "C:\Users\15856\PycharmProjects\pythonProject\.venv\Scripts\封装类实现登陆系统666\mainPage.py", line 45, in showDelete
    self.clearEffect()
  File "C:\Users\15856\PycharmProjects\pythonProject\.venv\Scripts\封装类实现登陆系统666\mainPage.py", line 58, in clearEffect
    self.modify_frame.pack_forget()
    ^^^^^^^^^^^^^^^^^
**_AttributeError: 'mainPageView' object has no attribute 'modify_frame_'**

麻烦大家帮我看看为什么报错会说属性错误

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-06-09 13:13
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    从您提供的代码和错误信息来看,问题出在mainPageView类的clearEffect方法中。错误信息指出'mainPageView' object has no attribute 'modify_frame',这意味着在调用clearEffect方法时,modify_frame属性不存在。

    问题的原因可能是在mainPageView类的__init__方法中,您尝试将AboutFrameInsertFrameQueryFrameDeleteFrameModifyFrame类的实例化结果赋值给相应的变量,但是您使用了.pack()方法调用,这实际上会返回一个None值,因为pack方法没有返回值。因此,这些变量实际上并没有被正确赋值。

    这里是您需要修改的地方:

    1. __init__方法中,创建各个frame时,不要调用.pack()方法,因为您需要将frame实例赋值给变量。

    2. self.about_frame = AboutFrame(self.root).pack()等行修改为self.about_frame = AboutFrame(self.root)等,去掉.pack()

    修改后的__init__方法应该看起来像这样:

    class mainPageView():
        def __init__(self, master):
            self.root = master
            self.root.title("小程序")
            self.root.geometry("300x300")
            self.createPage()
    
            # 创建frame实例,但不立即调用pack方法
            self.about_frame = AboutFrame(self.root)
            self.insert_frame = InsertFrame(self.root)
            self.delete_frame = DeleteFrame(self.root)
            self.query_frame = QueryFrame(self.root)
            self.modify_frame = ModifyFrame(self.root)
    
        def createPage(self):
            # ... 其他代码保持不变 ...
    
    1. showInsertshowQueryshowDeleteshowModify方法中,调用.pack()方法来显示相应的frame。

    修改后的showInsert方法应该看起来像这样:

    def showInsert(self):
        messagebox.showinfo("录入")
        self.clearEffect()
        self.insert_frame.pack()  # 调用pack方法来显示frame
    

    确保其他方法也进行了相应的修改。

    这样修改后,您的mainPageView类应该能够正确地管理各个页面的显示和隐藏,而不会遇到AttributeError

    至于参考资料,您可以查看Python的官方文档,特别是关于tkinter模块的部分,以及pack方法的使用说明。这里是Python官方文档的链接:

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月9日

悬赏问题

  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译
  • ¥100 对反编译和ai熟悉的开发者。
  • ¥15 带序列特征的多输出预测模型
  • ¥15 Python 如何安装 distutils模块
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?