【Python】Tkinter界面切换(可用于学生管理系统、图书管理系统、考勤系统等)

利用Tkinter模拟PyQt中的StackWeight的效果,在窗口中同一个位置切换不同界面。
首先给出代码,简要解释在注释中,详细解释在下面。

from tkinter import Tk, Label, Button
from tkinter.ttk import Frame


class SwitchFrame(object):
    def __init__(self, root):
        self.root = root
        root.title('界面切换')
        root.geometry('500x160')
        root.resizable(width=False, height=False)  # 阻止Python GUI的大小调整

        L1 = Label(root)
        L1.pack()  # L1用pack布局,用于切换按钮居中显示
        Button(L1, text='第1页', command=self.firstpage).grid(row=1, column=1, padx=10, pady=10)
        Button(L1, text='第2页', command=self.secondpage).grid(row=1, column=2, padx=10, pady=10)

        L2 = Label(root, borderwidth=2, relief="sunken")
        L2.pack()  # L2用pack布局,用于待切换界面居中显示
        # frame1
        frame1 = Frame(L2, padding=(5, 20, 10, 10))  # 界面1
        self.frame1 = frame1
        Label(frame1, text='Frame1').grid(row=1, column=1, padx=10, pady=10)
        Label(frame1, text='Frame1').grid(row=1, column=2, padx=10, pady=10)
        # frame2
        frame2 = Frame(L2, padding=(5, 20, 10, 10))  # 界面2
        self.frame2 = frame2
        Label(frame2, text='Frame2').grid(row=1, column=1, padx=10, pady=10)
        Label(frame2, text='Frame2').grid(row=1, column=2, padx=10, pady=10)

        self.currentpage = frame1
        self.currentpage.pack()  # 默认显示界面1,并记录当前界面

    def firstpage(self):
        if self.currentpage != self.frame1:
            self.currentpage.pack_forget()  # 取消显示当前界面,并不是销毁
            self.currentpage = self.frame1
            self.currentpage.pack()  # 显示界面1

    def secondpage(self):
        if self.currentpage != self.frame2:
            self.currentpage.pack_forget()  # 取消显示当前界面,并不是销毁
            self.currentpage = self.frame2
            self.currentpage.pack()  # 显示界面2


root = Tk()
SwitchFrame(root)
root.mainloop()

解释

首先使用了pack布局,用于放置两个Label,在两个Label上分别放置切换Frame的按钮和被切换的Frame。

在第二个Label里放置Frame,这里也用了pack布局,我们要做的就是让两个Frame来回切换。

在这里插入图片描述
在这里插入图片描述

使用pack_forget方法,先隐去当前Frame再显示另一个Frame,并不是销毁,因为销毁的话如果控件较多比较复杂会造成线程阻塞。

pack布局对应了pack_forget方法隐去,其他两种布局分别是grid_remove和place_forget。

  • 12
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以给您提供一个简单的可视化学生管理系统界面,代码如下: ```python import tkinter as tk class StudentManagementSystem: def __init__(self, master): self.master = master master.title("学生管理系统") master.geometry("400x300") # 姓名标签和输入框 self.name_label = tk.Label(master, text="姓名:") self.name_label.grid(row=0, column=0) self.name_entry = tk.Entry(master) self.name_entry.grid(row=0, column=1) # 年龄标签和输入框 self.age_label = tk.Label(master, text="年龄:") self.age_label.grid(row=1, column=0) self.age_entry = tk.Entry(master) self.age_entry.grid(row=1, column=1) # 性别标签和选择框 self.gender_label = tk.Label(master, text="性别:") self.gender_label.grid(row=2, column=0) self.gender_var = tk.StringVar() self.gender_var.set("男") self.gender_menu = tk.OptionMenu(master, self.gender_var, "男", "女") self.gender_menu.grid(row=2, column=1) # 添加学生按钮 self.add_button = tk.Button(master, text="添加学生", command=self.add_student) self.add_button.grid(row=3, column=0) # 显示学生信息的文本框 self.info_text = tk.Text(master) self.info_text.grid(row=4, column=0, columnspan=2) def add_student(self): name = self.name_entry.get() age = self.age_entry.get() gender = self.gender_var.get() student_info = f"姓名:{name} 年龄:{age} 性别:{gender}" self.info_text.insert(tk.END, student_info + "\n") root = tk.Tk() my_gui = StudentManagementSystem(root) root.mainloop() ``` 这个界面有三个输入框,分别是姓名、年龄和性别,还有一个添加学生的按钮和一个文本框用于显示学生信息。用户输入学生信息并点击添加学生按钮,程序会将学生信息添加到文本框中。 这只是一个简单的示例,您可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@苏丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值