tkinter-学习记录

1.checkbutton

 1.1 使用方式

1)创建IntVar变量,用于存储checkbutton的状态0或是1,这个变量的值会根据复选框的选中状态自动更新,选中时是1,未选中是0.

checkbutton_var = tk.IntVar()

IntVar()输出的结果就是:

PY_VAR0 <class 'tkinter.IntVar'>

2)绑定变量

variable=checkbutton_var

3)点击时的回调函数,可以通过变量名.get(),或是变量名.set()来获取或是设置checkbutton的状态值。默认情况下选中时就是为1,未选中时就是为0.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2024/4/26 23:15
# @Author : George
import tkinter as tk

root = tk.Tk()
root.title("Checkbutton 示例")


def on_checkbutton_click():
    print(globals()['checkbutton_var'].get())  # 从全局变量,获取状态值
    print(checkbutton_var.get())  # 获取checkbutton的值,选中时为1,未选中时为0
    if checkbutton_var.get():
        print("Checkbutton 已选中")
    else:
        print("Checkbutton 未选中")


checkbutton_var = tk.IntVar()  # 创建一个 IntVar 对象,用于存储 Checkbutton 的状态(0 或 1)
checkbutton = tk.Checkbutton(root,
                             text="选中我",
                             variable=checkbutton_var,  # 绑定变量
                             command=on_checkbutton_click)  # 点击时的回调函数
checkbutton.pack()  # 将 Checkbutton 添加到主窗口
root.mainloop()

e0949f56ed9e5f3c9cefa8e30b95211c.png

1.2 设置checkbutton二选一

给两个checkbutton全都绑定相同的setstate函数,并且传递不同的参数来区分不同的checkbutton。如果其中的一个checkbutton被选中,也就是num被传递为1时,将另外一个函数绑定的变量值设置为0时即可。也就是说我这个按钮被选中也就是绑定的变量值为1时,另外一个按钮绑定的变量值就设置直接设置为0

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2024/4/26 23:15
# @Author : George
import tkinter as tk

root = tk.Tk()
root.title("Checkbutton 示例")


def get_checkbutton_state():
    nan = checkbutton_nan.get()
    nv = checkbutton_nv.get()
    print(nan,nv)


def set_checkbutton_state(num):
    if num == 0:
        checkbutton_nv.set(0)
    if num == 1:
        checkbutton_nan.set(0)


checkbutton_nan = tk.IntVar()  # 创建一个 IntVar 对象,用于存储 Checkbutton 的状态(0 或 1)
checkbutton_1 = tk.Checkbutton(root,
                                 text="男",
                                 variable=checkbutton_nan,  # 绑定变量
                                 command=lambda: set_checkbutton_state(0))  # 点击时的回调函数
checkbutton_1.pack()  # 将 Checkbutton 添加到主窗口
checkbutton_nv = tk.IntVar()  # 创建一个 IntVar 对象,用于存储 Checkbutton 的状态(0 或 1)
checkbutton_2 = tk.Checkbutton(root,
                                text="女",
                                variable=checkbutton_nv,  # 绑定变量
                                command=lambda: set_checkbutton_state(1))  # 点击时的回调函数
checkbutton_2.pack()  # 将 Checkbutton 添加到主窗口
tk.Button(root, text="点击", command=get_checkbutton_state).pack()
root.mainloop()

1.3 解决冗余的checkbutton的定义和调用

如果要创建多个checkbutton,就需要定义多个Intvar(),此时可以使用字典来定义key_value.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2024/4/28 9:30
# @Author : George

from tkinter import *


class Test:
    def __init__(self, master):
        self.UI_list = {
            "1.test": {"1.zs_test": "zs",
                       "2.ls_test": "ls",
                       "3.ww_test": "ww",
                       "4.zl_test": "zl"
                       }}
        self.master = master
        self.init_UI()

    def init_UI(self):
        self.master.title("test")
        self.master.geometry("300x200")
        self.y_num = 0  # 设置checkbutton的高度
        self.var_dict = {}  # 存储checkbutton变量的字典
        for i, label in enumerate((self.UI_list["1.test"].keys())):
            bootargs_label = label.split(".")[1]
            Label(master=self.master, text=bootargs_label, width=12, anchor='w').place(relx=0.4, rely=self.y_num)
            self.create_checkbutton(bootargs_label, 1)
            self.create_checkbutton(bootargs_label, 2)
            self.y_num = (float(0.95) / (float(len(self.UI_list["1.test"]) + 1))) * (1 + i)
        Button(self.master, text='Get', width=11, height=1,
               command=lambda: self.get_state()).place(
            relx=0.05, rely=self.y_num)

    def create_checkbutton(self, label, num):
        var_name = "%s_state_%s" % (label, num)
        self.var_dict[var_name] = IntVar()
        checkbutton = Checkbutton(master=self.master, variable=self.var_dict[var_name],
                                  text="-a" if num == 1 else "-r", command=lambda: self.set_check_state(label, num))
        checkbutton.place(relx=0.05 + (num - 1) * 0.15, rely=self.y_num)

    # checkbutton的-a.-r二选一
    def set_check_state(self, label, num):
        state1 = label + "_state_" + str(num)
        if num == 1:
            self.var_dict[label + "_state_" + str(2)].set(0)
        if num == 2:
            self.var_dict[label + "_state_" + str(1)].set(0)

    def get_state(self):
        state1 = []
        state2 = []
        for label in sorted(self.UI_list["1.test"].keys()):
            label = label.split(".")[1]
            state_1 = label + "_state_" + "1"
            state_2 = label + "_state_" + "2"
            state1.append(self.var_dict[state_1].get())
            state2.append(self.var_dict[state_2].get())
        print(state1)
        print(state2)



if __name__ == '__main__':
    root = Tk()
    app = Test(root)
    root.mainloop()

66b3b967c6459a6481f09eab993dc7c8.png

2.Radiobutton

2.1 使用方式 

1)创建IntVar变量,用于存储Radiobutton根据传递的value来绑定的值

var = tk.IntVar()

IntVar()输出的结果就是:

PY_VAR0 <class 'tkinter.IntVar'>

2)绑定变量

variable=var

3)点击时的回调函数,可以通过变量名.get()获取的就是自己设置的value值

# _*_ coding utf-8 _*_
# george
# time: 2024/4/29上午10:59
# name: radiobutton_test.py
# comment:

import tkinter as tk
root = tk.Tk()

def on_option1_selected():
    print(var)
    print(var.get())

def on_option2_selected():
    print(var.get())

var = tk.IntVar()
radio_button1 = tk.Radiobutton(root, text="Option 1", variable=var, value=3, command=on_option1_selected)
radio_button2 = tk.Radiobutton(root, text="Option 2", variable=var, value=4, command=on_option2_selected)

radio_button1.pack()
radio_button2.pack()




root.mainloop()

d0f97ac1fc789fe3c6f274ac606ec3b0.png

3.删除组件里面的子组件的内容 

self.label_frame2.winfo_children()

获取的是包含子组件ID的列表,而不是子组件对象本身

for widget in self.label_frame2.winfo_children():  # 包含子组件ID的列表,而不是子组件对象本身
     widget.destroy()

4.打开文件并返回文件的路径

askopenfilename() 是 Tkinter 的 tkFileDialog 模块(在较新的 Python 版本中,这已被 filedialog 模块所取代)中的一个函数,它用于弹出一个文件选择对话框,让用户可以选择一个文件。这个函数返回用户选择的文件的完整路径,如果用户取消了对话框,则返回空字符串。

    def open_file(self):
        self.fpath = askopenfilename()
        if not self.fpath:
            tkbox.showerror("Error", "file not selected")
        self.file.set(self.fpath)
        self.entry["fg"] = "black"        

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值