Python_Gui_tkinker学习笔记

发布时间 2023-12-11 16:27:10作者: 小董同学32
# -*- coding:utf-8 -*-
import tkinter as tk

创建主窗口

# 调用Tk()创建主窗口
root_window =tk.Tk()

窗口名字

# 给主窗口起一个名字,也就是窗口的名字
root_window.title('C语言中文网:c.biancheng.net')

打开窗口

#开启主循环,让窗口处于显示状态
root_window.mainloop()

创建标签之后,需要使用 pack 方法放在主窗口内部

# 将标签对象放置在主窗口内
text.pack()

按钮同理

# 添加按钮
button=tk.Button(root_window,text="关闭",command=root_window.quit)
# 这里将按钮放置在主窗口的底部
button.pack(side="bottom")

基本案例

import tkinter as tk
# 定义窗口
window = tk.Tk()

window.title('c语言中文网')
window.geometry('300x300')
window.iconbitmap('C:/Users/Administrator/Desktop/favicon.ico')

# 定义回调函数
def callback():
    print("执行回调函数","C语言中文网欢迎您")
    
# 点击执行按钮
button = tk.Button(window, text="执行", command=callback)
button.pack()

window.mainloop()

窗口位置

居中

import tkinter as tk
window = tk.Tk()
window.title('c语言中文网')
window.iconbitmap('C:/Users/Administrator/Desktop/favicon.ico')
# 设置窗口大小变量
width = 300
height = 300
# 窗口居中,获取屏幕尺寸以计算布局参数,使窗口居屏幕中央
screenwidth = window.winfo_screenwidth()
screenheight = window.winfo_screenheight()
size_geo = '%dx%d+%d+%d' % (width, height, (screenwidth-width)/2, (screenheight-height)/2)
window.geometry(size_geo)
window.mainloop()

Label设置

label = tk.Label(win, text="网址:c.biancheng.net",font=('宋体',20, 'bold italic'),bg="#7CCD7C",
                 # 设置标签内容区大小
                 width=30,height=5,
                 # 设置填充区距离、边框宽度和其样式(凹陷式)
                 padx=10, pady=15, borderwidth=10, relief="sunken")

按钮设置

# 设置回调函数
def callback():
    print ("click me!")
# 使用按钮控件调用函数
b = tk.Button(window, text="点击执行回调函数", command=callback).pack()
# 显示窗口

这里的button.pack(),直接写在了 b 后面 .pack()

消息对话框控件

def click_button():
    # 使用消息对话框控件,showinfo()表示温馨提示
    messagebox.showinfo(title='温馨提示', message='欢迎使用C语言中文网')
# 点击按钮时执行的函数
button = tk.Button(window,text='点击前往',bg='#7CCD7C',width=20, height=5,command=click_button).pack()

showinfo()表示温馨提示

messagebox消息对话框

案例设置登陆退出窗口

win.resizable(0,0) # 禁止调整窗口大小

# 放置文字标签分别布置在第一行、第二行
tk.Label(win, text="账号:").grid(row=0, column=0)
tk.Label(win, text="密码:").grid(row=1, column=0)
# 创建输入框控件
e1 = tk.Entry(win)
# 以 * 的形式显示密码
e2 = tk.Entry(win,show='*')
e1.grid(row=0, column=1, padx=10, pady=5) # padx和pady是控制控件周围的空白区域
e2.grid(row=1, column=1, padx=10, pady=5)
# 编写一个简单的回调函数
def login():
    messagebox.showinfo('欢迎您到来')
# 使用 grid()的函数来布局,并控制按钮的显示位置
tk.Button(win, text="登录", width=10, command=login).grid(row=3, column=0, sticky="w", padx=10, pady=5)
tk.Button(win, text="退出", width=10, command=win.quit).grid(row=3, column=1, sticky="e", padx=10, pady=5)
win.mainloop()

Entry 控件

允许用户输入内容,从而实现 GUI 程序与用户的交互

Text 文本控件

text = Text(win, width=50, height=20, undo=True, autoseparators=False)
text.grid(row=4)
# INSERT 光标处插入;END 末尾处插入
text.insert(INSERT, 'C语言中文网,一个有温度的网站')
# 定义撤销和恢复方法,调用edit_undo()和 edit_redo()方法
def backout():
    text.edit_undo()
def regain():
    text.edit_redo()
# 定义撤销和恢复按钮
Button(win,text = '撤销',command = backout).grid(row=3, column=0, sticky="w", padx=10, pady=5)
Button(win,text = '恢复',command = regain).grid(row=3, column=0, sticky="e", padx=10, pady=5)
win.mainloop()

校园网数据库拼接

result_list = []
def display_accounts():
    cursor.execute("SELECT * FROM 用户 ORDER BY 剩余流量 DESC")  # 按剩余流量从大到小排序
    rows = cursor.fetchall()
    for row in rows:
        # 把所有的按照格式拼接好,放到列表中
        account_info = f"账户: {row[0]} 密码: {row[1]} 剩余流量: {row[2]}"
        print(account_info)
        # 将每一行的信息追加到主列表
        result_list.append(account_info)
        
    return result_list  # 返回提取的所有账户信息

渲染到列表

# 创建主窗口
win = Tk()
win.geometry('400x500')

# 创建列表选项,并设置列表宽度
listbox =Listbox(win,width=400)
listbox.pack()

# i表示索引值,item 表示值,根据索引值的位置依次插入
for i,item in enumerate(display_accounts()):
    print(i,item)
    listbox.insert(i,item)

Listbox控件案例

Untitled

1、创建Listbox,然后传入变量

var2 = tk.StringVar()
var2.set(("C语言辅导班", "Python答疑辅导", "Java答疑辅导", "C++辅导"))

2、建一个序列,然后将值循环添加到Listbox控件中

# 新建一个序列,然后将值循环添加到Listbox控件中
items = ["C", "Java", "Python", "C#", "Golang", "Runby"]
for i in items:
    lb.insert('end', i)  # 从最后一个位置开始加入值

3、创建按钮放置,按钮调用print_selection函数

b1 = tk.Button(window, text='获取当前选项', command=click_button)
b1.pack()

4、点击函数click_button

val = lb.get(lb.curselection()) # 获取当前选中的文本

var1.set(val) # 把选中的值放入var1中

# 创建一个按钮的点击事件
def click_button():
    # 使用 curselection来选中文本
    try:
        val = lb.get(lb.curselection()) # 获取当前选中的文本
        # 设置label值
        var1.set(val)
    except Exception as e:
        e = '发现一个错误'
        messagebox.showwarning(e,'没有选择任何条目')

实例

1、设置校园网数据库

# 连接到数据库
conn = sqlite3.connect('/Users/dcl/Desktop/demo/Mine/校园网/data.db')
cursor = conn.cursor()
result_list = []
def display_accounts():
    cursor.execute("SELECT * FROM 用户 ORDER BY 剩余流量 DESC")  # 按剩余流量从大到小排序
    rows = cursor.fetchall()
    for row in rows:
        # 把所有的按照格式拼接好,放到列表中
        account_info = f"账户: {row[0]} 密码: {row[1]} 剩余流量: {row[2]}"
        print(account_info)
        # 将每一行的信息追加到主列表
        result_list.append(account_info)
        
    return result_list  # 返回提取的所有账户信息

2、创建列表 listbox

listbox = tk.Listbox(window,width=400)
listbox.pack()

3、选中数据追加到列表

# i表示索引值,item 表示值,根据索引值的位置依次插入
for i,item in enumerate(display_accounts()):
    print(i,item)
    listbox.insert(i,item)

4、接收鼠标点击的具体选项内容

# 创建变量,用var1用来接收鼠标点击的具体选项内容
var1 = tk.StringVar()
l = tk.Label(window, bg='#B0B0B0', font=('微软雅黑', 15), width=50, textvariable=var1)
l.pack()

5、点击动作函数

# 创建一个按钮的点击事件
def click_button():
    # 使用 curselection来选中文本
    try:
        val = listbox.get(listbox.curselection()) # 获取当前选中的文本
        # 设置label值
        var1.set(val) # 把选中的值放入var1中
    except Exception as e:
        e = '发现一个错误'
        messagebox.showwarning(e,'没有选择任何条目')

特别是:val = listbox.get(listbox.curselection()) # 获取当前选中的文本

6、创建按钮放置

# 创建一个按钮并放置,点击按钮调用print_selection函数
b1 = tk.Button(window, text='获取当前选项', command=click_button)
b1.pack()
#主窗显示
window.mainloop()