tkinter 模板框架

用tkinter写项目时,合理设计个框架很重要,这样便于修改。可以把界面放在一个类里面,然后逻辑代码继承这个类,这样就实现了逻辑与UI的分离。如下所示:


class LoginUi():
    def __init__(self,root):
        self.root=root
        self.root.geometry('500x500+100+100')
        self.root.title("login")
        self.creat_widgets()
    def creat_widgets(self):

        self.username=tk.StringVar()
        self.password=tk.StringVar()

        self.page=tk.Frame(self.root)
        self.page.pack()

        tk.Label(self.page).grid(row=0,column=0)
        tk.Label(self.page,text='account:').grid(row=1,column=1)
        tk.Entry(self.page,textvariable=self.username).grid(row=1,column=2)

        tk.Label(self.page,text='password:').grid(row=2,column=1)
        tk.Entry(self.page,textvariable=self.password).grid(row=2,column=2)

        tk.Button(self.page,text='login',command=self.login).grid(row=3,column=1,pady=10)
                    
      
      tk.Button(self.page,text='exit',command=self.page.quit).grid(row=3,column=2,pady=10)


class Login(LoginUi):
    def __init__(self,root):
        super().__init__(root)
        self.flag=True
    def login(self):
        name=self.username.get()
        pwd=self.password.get()
        flag,msg=DB.check_login(name,pwd)

        if flag:
            self.page.destroy()
            MainPage(self.root)
        else:
            messagebox.showinfo(title='warning',message=msg)


if __name__=='__main__':
  root=tk.Tk()
  login=Login(root)
  root.mainloop()

这种写法虽然分离了,但总感觉太散了,我还是喜欢一个类里写好界面,定义函数。如果要是处理文件数据或数据库,就单独写个数据模型,把数据模型导入进来更好。如下:


class AboutFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        tk.Label(self,text='本次作品').pack()
        tk.Label(self,text='hello world').pack()
        tk.Label(self,text='qq:272117416').pack()

class ChangeFrame(tk.LabelFrame):
    def __init__(self,root):
        super().__init__(root)
        self.name=tk.StringVar()
        self.math=tk.StringVar()
        self.chinese=tk.StringVar()
        self.englilsh=tk.StringVar()
        self.status=tk.StringVar()
        self.creat_page()
    def creat_page(self):
        tk.Label(self).grid(row=0,pady=10)

        tk.Label(self,text='姓名').grid(row=1,column=1)
        tk.Entry(self,textvariable=self.name).grid(row=1,column=2,pady=10)

        tk.Label(self,text='数学').grid(row=2,column=1)
        tk.Entry(self,textvariable=self.math).grid(row=2,column=2,pady=10)

        tk.Label(self, text='语文').grid(row=3, column=1)
        tk.Entry(self, textvariable=self.chinese).grid(row=3, column=2, pady=10)

        tk.Label(self, text='英语').grid(row=4, column=1)
        tk.Entry(self, textvariable=self.englilsh).grid(row=4, column=2, pady=10)

        tk.Button(self,text='查询',command=self.search_info).grid(row=5,column=1,pady=10)
        tk.Button(self,text='修改',command=self.change_info).grid(row=5,column=2,pady=10)

    def search_info(self):
        pass

    def change_info(self):
        pass


class Ui():
    def __init__(self,root):
        self.root=root
        self.root.title("学生管理")
        self.root.geometry('500x500+100+100')
        self.creat_widgets()
    def creat_widgets(self):

        self.username=tk.StringVar()
        self.password=tk.StringVar()

        self.about_frame=AboutFrame(self.root)
        self.change_frame=ChangeFrame(self.root)

        menubar=tk.Menu(self.root)
        menubar.add_command(label='about',command=self.show_about)
        menubar.add_command(label='change',command=self.show_change)
        self.root['menu']=menubar
    def show_about(self):
        pass
    def show_change(self):
        pass

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值