青亭浅 2024-05-20 13:08 采纳率: 88.2%
浏览 2
已结题

python11111


from tkinter import *


class studentClass():
    def __init__(self, master):
        Button(master, text="这是学生管理界面").pack()


class adminClass():
    def __init__(self, master):
        Button(master, text="这是招聘管理界面", font=("微软雅黑", 14), fg="white", bg="#96CDCD").pack()


class scoreClass():
    def __init__(self, master):
        Label(master, text="这是打分管理界面").pack()


class journalClass():
    def __init__(self, master):
        Label(master, text="这是日志管理界面").pack()


class discussClass():
    def __init__(self, master):
        Label(master, text="这是讨论区管理界面").pack()


root = Tk()

root.geometry("700x500")

frame = Frame(root, width=100, height=500, highlightbackground="#668B8B", highlightthickness=3)
frame.config(background="#96CDCD")
frame.pack(fill=Y, side=LEFT)

bai = Label(frame)

student = Label(frame, text="学生系统", font=("微软雅黑", 14), fg="white", bg="#96CDCD")
student.place(x=5, y=30)

admin = Label(frame, text="招聘系统", font=("微软雅黑", 14), fg="white", bg="#96CDCD")
admin.place(x=5, y=120)

score = Label(frame, text="打分管理", font=("微软雅黑", 14), fg="white", bg="#96CDCD")
score.place(x=5, y=210)

journal = Label(frame, text="日志管理", font=("微软雅黑", 14), fg="white", bg="#96CDCD")
journal.place(x=5, y=300)

discuss = Label(frame, text="讨论区", font=("微软雅黑", 14), fg="white", bg="#96CDCD")
discuss.place(x=5, y=390)

stuFrame = Frame(root)
admFrame = Frame(root)
scoFrame = Frame(root)
jouFrame = Frame(root)
disFrame = Frame(root)


def stuFuntion(event=None):
    studentClass(stuFrame)
    stuFrame.pack()
    admFrame.pack_forget()
    scoFrame.pack_forget()
    jouFrame.pack_forget()
    disFrame.pack_forget()


def admFuntion(event=None):
    adminClass(admFrame)
    admFrame.pack()
    stuFrame.pack_forget()
    scoFrame.pack_forget()
    jouFrame.pack_forget()
    disFrame.pack_forget()


def scoFuntion(event=None):
    scoreClass(scoFrame)
    scoFrame.pack()
    stuFrame.pack_forget()
    jouFrame.pack_forget()
    disFrame.pack_forget()
    admFrame.pack_forget()


def jouFuntion(event=None):
    journalClass(jouFrame)
    jouFrame.pack()
    stuFrame.pack_forget()
    disFrame.pack_forget()
    admFrame.pack_forget()
    scoFrame.pack_forget()


def disFuntion(event=None):
    discussClass(disFrame)
    disFrame.pack()
    stuFrame.pack_forget()
    disFrame.pack_forget()
    admFrame.pack_forget()
    scoFrame.pack_forget()


student.bind("<Button-1>", stuFuntion)
admin.bind("<Button-1>", admFuntion)
score.bind("<Button-1>", scoFuntion)
journal.bind("<Button-1>", jouFuntion)
discuss.bind("<Button-1>", disFuntion)

root.title("学生管理系统")

root.mainloop()

每点击一次label或Button就添加一个,怎末让其就显示一次

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-05-20 13:08
    关注

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


    【您想要解决的问题】:您希望在Python的Tkinter GUI程序中,点击标签或按钮后,相应的类实例化界面只显示一次,而不是每次点击都重新创建。

    【问题出现原因】:在当前的代码中,每次点击标签时,都会调用相应的函数,这些函数会重新创建一个类实例,并将其界面添加到窗口中。由于没有检查是否已经创建过实例,所以每次点击都会创建新的界面。

    【问题解决方案】:为了解决这个问题,您可以在每个函数中添加一个检查,以确保只有在没有创建过实例时才创建新的界面。这可以通过设置一个标志变量来实现,该变量在创建界面时设置为True。

    【提供代码】:以下是修改后的代码,添加了标志变量来确保每个界面只创建一次:

    from tkinter import *
    
    class studentClass():
        def __init__(self, master):
            self.master = master
            Button(master, text="这是学生管理界面").pack()
    
    class adminClass():
        def __init__(self, master):
            self.master = master
            Button(master, text="这是招聘管理界面", font=("微软雅黑", 14), fg="white", bg="#96CDCD").pack()
    
    # ... 其他类的定义保持不变 ...
    
    stuFrame = Frame(root)
    admFrame = Frame(root)
    scoFrame = Frame(root)
    jouFrame = Frame(root)
    disFrame = Frame(root)
    
    # 初始化标志变量
    stu_created = False
    adm_created = False
    sco_created = False
    jou_created = False
    dis_created = False
    
    def stuFuntion(event=None):
        global stu_created
        if not stu_created:
            studentClass(stuFrame)
            stuFrame.pack()
            admFrame.pack_forget()
            scoFrame.pack_forget()
            jouFrame.pack_forget()
            disFrame.pack_forget()
            stu_created = True
    
    def admFuntion(event=None):
        global adm_created
        if not adm_created:
            adminClass(admFrame)
            admFrame.pack()
            stuFrame.pack_forget()
            scoFrame.pack_forget()
            jouFrame.pack_forget()
            disFrame.pack_forget()
            adm_created = True
    
    # ... 其他函数的定义保持不变,添加相应的标志变量 ...
    
    # 其他代码保持不变 ...
    
    root.mainloop()
    

    【代码运行方式】:要运行此代码,您需要有Python环境和Tkinter库。通常,Python安装会自带Tkinter。您只需将上述代码保存为.py文件,并在命令行或IDE中运行它。

    【代码预期运行结果】:当您运行此代码并点击标签时,相应的界面只会创建并显示一次,后续点击将不会有任何变化。

    【推荐相关链接】:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月29日
  • 已采纳回答 5月21日
  • 创建了问题 5月20日

悬赏问题

  • ¥15 TeleScan不能修改bar
  • ¥100 请问我基于逐飞库写的这个有关于mp u6050传感器的函数,为什么输出的值是固定的?
  • ¥15 hadoop中启动hive报错如下怎么解决
  • ¥15 如何优化QWebEngineView 加载url的速度
  • ¥15 关于#hadoop#的问题,请各位专家解答!
  • ¥15 如何批量抓取网站信息
  • ¥15 Spring Boot离线人脸识别
  • ¥15 使用Ant Design Pro vue的时候,使用环境变量的时候,构建报错是什么原因
  • ¥15 NRF24L01能发送但是不能接收
  • ¥15 想问一下这种情况怎么解决呢(关键词-file)