首页 > 其他分享 >tkinter学习笔记

tkinter学习笔记

时间:2023-05-13 10:32:43浏览次数:47  
标签:__ tkinter column text self 笔记 学习 tk root

一:项目背景

利用tkinter做一个GUI页面,用于实现学生信息的管理,实现学生信息的新增、修改、删除、查询等功能

二:布局

pack()、grid() 以及 place()

三:使用技术栈

标签(Label)与单行输入框(Entry)

样例:

代码实现:

# 新增页面
class InsertFrame(tk.Frame):
    def __init__(self ,root):
        super().__init__(root)
        # tk.Label(self,text='学生信息的录入').pack()
        self.stuid =tk.StringVar()
        self.create_page()
        
        # 新增一条数据方法
    def create_page(self):
        tk.Label(self).grid(row=0 ,pady=10)  # 布局

        tk.Label(self, text='学号:').grid(row=1 ,column=1 ,pady=5)
        tk.Entry(self ,textvariable=self.stuid).grid(row=1 ,column=2 ,pady=5)
        tk.Label(self, text='姓名:').grid(row=2, column=1, pady=5)
        tk.Entry(self, textvariable=self.name).grid(row=2, column=2, pady=5)

        # 按钮
        tk.Button(self, text='确定', command=self.usr_insertIn).grid(row=7, column=2, pady=5)
单选按钮(Radiobutton)

样例


代码实现:

# 新增页面
class InsertFrame(tk.Frame):
    def __init__(self ,root):
        super().__init__(root)
        # tk.Label(self,text='学生信息的录入').pack()
        self.sex =tk.IntVar()
        self.create_page()
        
        # 新增一条数据方法
    def create_page(self):
        tk.Label(self).grid(row=0 ,pady=10)  # 布局

        tk.Label(self, text='性别:').grid(row=3, column=1, pady=5)
        tk.Radiobutton(self ,text='男',variable=self.sex,value=0).grid(row=3, column=2, pady=5)
        tk.Radiobutton(self, text='女',variable=self.sex,value=1).grid(row=3, column=3, pady=5)

        # 按钮
        tk.Button(self, text='确定', command=self.usr_insertIn).grid(row=7, column=2, pady=5)
复选框(Checkbutton)

样例:


代码实现:

# 新增页面
class InsertFrame(tk.Frame):
    def __init__(self ,root):
        super().__init__(root)
        # tk.Label(self,text='学生信息的录入').pack()
        self.stuInterest =tk.StringVar()
        self.create_page()
        
        # 新增一条数据方法
    def create_page(self):
        tk.Label(self).grid(row=0 ,pady=10)  # 布局
        
         # 新建整型变量
        CheckVar1 = tk.IntVar()
        CheckVar2 = tk.IntVar()
        CheckVar3 = tk.IntVar()
        CheckVar1.set(1)  #设置默认选中一个
        tk.Label(self, text='爱好:').grid(row=5, column=1, pady=5)
        tk.Checkbutton(self ,text='Python' ,variable=CheckVar1 ,onvalue=1 ,offvalue=0).grid(row=5, column=2, pady=5)
        tk.Checkbutton(self, text='C++', variable=CheckVar2, onvalue=2, offvalue=0).grid(row=5, column=3, pady=5)
        tk.Checkbutton(self, text='Java', variable=CheckVar3, onvalue=3, offvalue=0).grid(row=5, column=4, pady=5)

        self.stuInterest =CheckVar1, CheckVar2, CheckVar3 # 列表的格式
        
         # 按钮
        tk.Button(self, text='确定', command=self.usr_insertIn).grid(row=7, column=2, pady=5)
多行文本框(Text)

样例:


代码实现:

# 新增页面
class InsertFrame(tk.Frame):
    def __init__(self ,root):
        super().__init__(root)
        # tk.Label(self,text='学生信息的录入').pack()
        self.messages = tk.StringVar()
        self.create_page()
        
        # 新增一条数据方法
    def create_page(self):
        tk.Label(self).grid(row=0 ,pady=10)  # 布局
        
        tk.Label(self, text='其它:').grid(row=6, column=1, pady=5)
        tesxt = tk.Text(self, width=20, height=5)
        tesxt.grid(row=6, column=2, pady=5)
        tesxt.insert('insert', '请在这里输入')
        self.messages = tesxt  # 把文本框的值传递给变量,然后在按钮中使用get()获取值
        
         # 按钮
        tk.Button(self, text='确定', command=self.usr_insertIn).grid(row=7, column=2, pady=5)
消息框(messagebox)

样例:


代码实现:

from tkinter import messagebox   # 注意:需要引用这个包

try:
       if username == 'admin' and passward == '123456':
                tk.messagebox.showinfo(title='Welcome', message='登录成功,欢迎您!!!')
                self.page.destroy()  # 销毁登录界面
                MainPage(self.win)
       else:
                tk.messagebox.showerror(title='Error', message='用户名或密码错误,请重新登录!')
except:
                tk.messagebox.showerror(title='错误', message='该用户可能不存在')
菜单栏(Menu)

样例:


代码实现:

class MainPage:
    def __init__(self,master:tk.Tk):
        self.root=master
        # 设置窗口title
        self.root.title('学生信息录入系统')
        self.root.geometry('600x400')  # 设置窗口大小:宽x高,注,此处不能为 "*",必须使用 "x"
        self.create_page()
        
         #创建菜单栏
    def create_page(self):
       
       # 先引用
       self.insert_frame=InsertFrame(self.root)   #调用封装好的--录入页面
       self.look_frame=LookFrame(self.root) #调用封装好的--查询页面
       self.delete_frame = DeleteFrame(self.root)  # 调用封装好的--删除页面
       self.Change_frame = ChangeFrame(self.root) #调用封装好的--修改页面
       self.about_frame=AboutFrame(self.root)   #调用封装好的--关于页面
       
       # 添加菜单项
       menubar=tk.Menu(self.root)
       menubar.add_command(label='录入',command=self.insert_about)
       menubar.add_command(label='查询',command=self.look_about)
       menubar.add_command(label='删除',command=self.delete_about)
       menubar.add_command(label='修改',command=self.Change_about)
       menubar.add_command(label='关于',command=self.show_about)
       self.root['menu']=menubar  # 绑定到整个 root对象上
        
if __name__ =='__main__':
   root=tk.Tk()  # 调用Tk()创建主窗口   【实现学生信息录入】
   MainPage(master=root)
   root.mainloop()  # 开启主循环,让窗口处于显示状态
树形列表控件(tree_view)
def create_page(self):
        # columns==数据列      columns_values==列名
        columns = ('stuid', 'stuName', 'stuSex', 'age', 'stuInterest', 'message')
        columns_values = ('学号', '姓名', '性别', '年龄', '兴趣爱好', '其它')
        # 创建 Treeview
        self.tree_view = ttk.Treeview(self, show='headings', columns=columns)
        self.tree_view.column('stuid', width=80, anchor='center')
        self.tree_view.column('stuName', width=80, anchor='center')
        self.tree_view.column('stuSex', width=80, anchor='center')
        self.tree_view.column('age', width=80, anchor='center')
        self.tree_view.column('stuInterest', width=80, anchor='center')
        self.tree_view.column('message', width=80, anchor='center')

        self.tree_view.heading('stuid', text='学号')
        self.tree_view.heading('stuName', text='姓名')
        self.tree_view.heading('stuSex', text='性别')
        self.tree_view.heading('age', text='年龄')
        self.tree_view.heading('stuInterest', text='兴趣爱好')
        self.tree_view.heading('message', text='其它')
        
        # 填充数据
        self.tree_view.pack(fill=tk.BOTH, expand=True)
        # 写的一个查询数据的方法
        self.show_Data_frame()

        # 刷新按钮
        tk.Button(self, text='刷新数据', command=self.show_Data_frame).pack(anchor=tk.E, pady=5)

四、DBhelper(SQL查询的类)

import mysql.connector

class MysqlDb():
    __db_config = {
    'host':'localhost',
    'port':3306,
    'username':'root',
    'password':'root',
    'database':'tkinter',
    'charset':'utf8'
    }
    def __init__(self,host=__db_config['host'],port=__db_config['port'],user=__db_config['username'],passwd=__db_config['password'],db=__db_config['database'],charset=__db_config['charset']):
        try:
           self.connection = mysql.connector.connect(host=host,port=port,user=user,passwd=passwd,db=db,charset=charset)
        except mysql.connector.Error as e:
            print("Connect Database Failed.",str(e))
        self.cursor = self.connection.cursor(buffered=True)
     # 查询所有
    def fetchall(self, sql):
         try:
             self.__execute(sql)
             return self.cursor.fetchall()
         except Exception as error:
             print(error)
    # 查询多条数据
    def fetchmany(self, sql, size=1):
         try:
             self.__execute(sql)
             return self.cursor.fetchmany(size)
         except Exception as error:
             print(error)
    # 查询一条数据
    def fetchone(self, sql):
         try:
             self.__execute(sql)
             return self.cursor.fetchall()
         except Exception as error:
             print(error)
    # 增删改的方法
    def change(self, sql):
         try:
             self.__execute(sql)
             self.connection.commit()
             return self.cursor.rowcount    # 返回影响行数
         except Exception as error:
             print(error)
    # 执行的私有方法
    def __execute(self, sql):
         self.cursor.execute(sql)
    # 关闭连接和游标
    def __del__(self):
         self.connection.close()

四:界面优化

使用ttkbootstrap 优化tkinter 界面

pip install ttkbootstrap  # 安装包

实例:

tkinter学习笔记_sql

参考: https://ttkbootstrap.readthedocs.io/en/latest/styleguide/

标签:__,tkinter,column,text,self,笔记,学习,tk,root
From: https://blog.51cto.com/u_16091142/6273588

相关文章

  • mysql常用函数、查询和事务说明笔记
    1.MySQL中内置了很多字符串函数,常用的几个如下:运用示例:示例表里初始数据:  字段title和titleImageconcat:字符串拼接selectconcat(title,titleImage)asnewtitlefrom testtablewhereid=65;lower:全部转小写select lower(title) asnewtitlefrom testta......
  • Python学习之四_部分battery的学习
    Python学习之四_部分battery的学习CentOS升级pip的方法yuminstallpython3之后,一般centos的版本都很低,有时候很多module是无法安装的.一般可以通过他进行升级:pip3install-Upip注意如果无法升级,可以先这样处理mkdir-p/root/.config/pip/cat>/root/.c......
  • 视觉大模型DINOv2:自我监督学习的新领域
    如果你对自监督学习感兴趣,可能听说过Facebook人工智能的DINO(无标签知识蒸馏)。我们在以前的文章中也介绍过它。DINOv2不仅是一个新版本而且带来了新的改进,并为判别性自监督学习设定了更高的标准。当然公司的名字也从Facebook变为了Meta。本文将介绍DINOv2是如何改进的,以及这些进......
  • 使用讯飞模型学习Excel VLOOKUP的一次体验
    提问1:EXCELVLOOKUP回答1:VLOOKUP是Excel中的一种查找函数,用于在一个表格中查找某个值,并返回该值所在行的指定列的值。其语法如下:```VLOOKUP(lookup_value,table_array,col_index_num,[range_lookup])```其中:-lookup_value:要查找的值。-table_array:要在其中进行查找的......
  • 野火RA6M5开发板 IIC-OLED测试学习
    野火RA6M5开发板IIC-OLED测试学习野火RA6M5开发板野火RA6M5开发板上的外部高速晶振为24M.【瑞萨RA4系列开发板体验】通过Uart串口烧写程序https://bbs.elecfans.com/jishu_2322246_1_1.htmlIIC配置参考文章瑞萨e2studio-IIC-12864OLED移植https://blog.csdn.net/qq_2......
  • 印象笔记强制notes格式后导入obsidian、有道云笔记方法
    新版印象笔记给enex格式去掉了,换成notes格式,无法导入别的地方,上网查了下还是有方法导出的安装工具$pipinstall--userevernote-backup按照教程同步笔记$evernote-backupinit-db--backendchina$evernote-backupsync$evernote-backupexportoutput_dir/......
  • Django笔记四十之运行Django环境的python脚本
    本文首发于公众号:Hunter后端原文链接:Django笔记四十之运行Django环境的python脚本这一篇笔记介绍如何在Django中运行脚本。假设说我们要实现一个功能,需要获取blog.models.Blog这张表里的总数且使用print()输出。如果代码逻辑很短,且是一次性执行的操作,我们可以在系统的......
  • Python 输出简单彩色字符【ANSI 转义序列笔记】
    """ASCII码的0-31和127被称为C0控制字符例如\07就是BEL,响铃(\0表示八进制)其中\033(十进制27,十六进制x1B)是ESC,转义字符,它可以用于转义序列如\033[表示序列导入(ControlSequenceIntroducer),简写为CSI也可写作\x1b[两个字......
  • 笔记day02
    一、编程语言的发展史1.机器语言 机器语言:就是计算机内部只能识别0,1二进制。由于计算机是基于电工作的,而电有高低电频之分。  优点:执行速度快;缺点:学习难度大。2.汇编语言  汇编语言:用简单的英文字母表示一串二进制。比如:用a来表示0001。  其优点是:执行速度快;......
  • 22092133《Java程序设计》第一周学习总结
    1本周学习总结: 一个Java源文件可能编译出多个字节码文件。Scanner是Java的一个类,使用Scanner对象读取数据的时候,要注意next()方法只能读取到有效字符之前遇到的空白,并不能得到带有空格的字符串,nextLine()方法以Enter为结束符,返回输入回车之前的字符就可以获得空白2.书面作业......