首页 > 编程问答 >Tkinter 按钮不更新变量

Tkinter 按钮不更新变量

时间:2024-08-09 02:46:44浏览次数:13  
标签:python tkinter tk-toolkit

我有一个类中有两个单选按钮的 GUI,使用 tkinter 的第一个单选按钮旨在将变量 save_to_excel 设置为 True,而第二个单选按钮应为 false,这是为了让用户确定是否要保存信息作为 Excel 工作表或文本文档。我有一个旧版本的代码,可以工作并正确更新变量,但是新版本必须更改某些内容,而新版本无法正确更新它。

当前代码(不起作用):

class DICOMExtractorApp:
    def __init__(self, root):
        try:
            self.root = root
            self.root.title("DICOM Info Extractor")
            self.root.configure(bg="white")

            # Initializing variables
            self.folder_path = ""
            self.output_path = ""
            self.save_to_excel = tk.BooleanVar(value=True)  # Default to saving to Excel
            self.dicom_tags = {}
            self.default_tags = {
                "Filename": "filename",
                "Acquisition Date": (0x0008, 0x0022),
                "Manufacturer": (0x0008, 0x0070),
                "Study Description": (0x0008, 0x1030),
                "Instance Number": (0x0020, 0x0013),
                "Series Description": (0x0008, 0x103E),
                "Acquisition Time": (0x0008, 0x0032),
                "Modality": (0x0008, 0x0060),
                "Station Name": (0x0008, 0x1010)
            }
            self.selected_tags = {tag: tk.BooleanVar(value=True) for tag in self.default_tags}
            self.tags_per_page = 10
            self.current_page = 0

            self.create_widgets()
        except Exception as e:
            self.log_error(e)
...
            tk.Radiobutton(self.root, text="Save to Excel", variable=self.save_to_excel, value=True, bg="white", command=self.print_save_option).place(x=350, y=20)
            tk.Radiobutton(self.root, text="Save to Text", variable=self.save_to_excel, value=False, bg="white", command=self.print_save_option).place(x=460, y=20)

旧代码:|| |当我选择“保存到文本”单选按钮时,我希望输出打印 False,当我选择“保存到 Excel”单选按钮时,输出打印 True...

class DICOMExtractorApp:
    def __init__(self, root):
        self.root = root
        self.root.title("DICOM Info Extractor")
        self.root.configure(bg="white")

        self.folder_path = ""
        self.output_path = ""
        self.save_to_excel = tk.BooleanVar(value=True)
        self.dicom_tags = self.load_dicom_tags()
        self.default_tags = {
            "Filename": "filename",
            "Acquisition Date": (0x0008, 0x0022),
            "Manufacturer": (0x0008, 0x0070),
            "Study Description": (0x0008, 0x1030),
            "Instance Number": (0x0020, 0x0013)
        }
        self.selected_tags = {tag: tk.BooleanVar() for tag in self.default_tags}

        self.create_widgets()
...
   tk.Radiobutton(self.root, text="Save to Excel", variable=self.save_to_excel, value=True, bg="white",command=self.print_save_option).place(x=350, y=20)
        tk.Radiobutton(self.root, text="Save to Text", variable=self.save_to_excel, value=False, bg="white",command=self.print_save_option).place(x=460, y=20)

I expect the output to print False when I select 'save to text' radio button and True when I select 'save to excel' radiobutton...


问题出在如何初始化 selected_tags 字典。在当前代码中,将 selected_tags 初始化为包含 default_tags 中每个标签的布尔变量的字典。但是,在初始化这些布尔变量时没有将它们与 self.save_to_excel 变量相关联。

以下是修复代码的方法:

class DICOMExtractorApp:
    def __init__(self, root):
        try:
            self.root = root
            self.root.title("DICOM Info Extractor")
            self.root.configure(bg="white")

            # Initializing variables
            self.folder_path = ""
            self.output_path = ""
            self.save_to_excel = tk.BooleanVar(value=True)  # Default to saving to Excel
            self.dicom_tags = {}
            self.default_tags = {
                "Filename": "filename",
                "Acquisition Date": (0x0008, 0x0022),
                "Manufacturer": (0x0008, 0x0070),
                "Study Description": (0x0008, 0x1030),
                "Instance Number": (0x0020, 0x0013),
                "Series Description": (0x0008, 0x103E),
                "Acquisition Time": (0x0008, 0x0032),
                "Modality": (0x0008, 0x0060),
                "Station Name": (0x0008, 0x1010)
            }

            # 正确初始化 selected_tags
            self.selected_tags = {tag: tk.BooleanVar(value=self.save_to_excel.get()) for tag in self.default_tags}

            self.tags_per_page = 10
            self.current_page = 0

            self.create_widgets()
        except Exception as e:
            self.log_error(e)
...
            tk.Radiobutton(self.root, text="Save to Excel", variable=self.save_to_excel, value=True, bg="white", command=self.print_save_option).place(x=350, y=20)
            tk.Radiobutton(self.root, text="Save to Text", variable=self.save_to_excel, value=False, bg="white", command=self.print_save_option).place(x=460, y=20)

通过在 selected_tags 初始化期间使用 self.save_to_excel.get() ,可以确保每个标签的布尔变量都设置为与 self.save_to_excel 变量的当前值相同。这样,当更改 self.save_to_excel 时, selected_tags 中的相应布尔变量也会更新。

标签:python,tkinter,tk-toolkit
From: 78849991

相关文章

  • pyocr,一个超酷的Python库!
    pyocr是一个用于光学字符识别(OCR)的Python库,它提供了一个简单的接口,允许开发者将图片中的文本提取出来。这个库是对Tesseract-OCR的封装,使得在Python环境中使用OCR技术变得更加便捷。如何安装pyocr首先,要使用pyocr库,您需要安装它。可以使用pip包管理工具来进......
  • pattern,一款超牛的Python库
    在程序开发中,处理文本数据和进行自然语言处理是常见需求。pattern是一个强大的Python库,专为文本分析而设计,提供了丰富的功能,包括自然语言处理、数据挖掘和网络分析等。它简单易用,让程序员能够快速实现复杂的文本处理任务。如何安装pattern在开始使用pattern库之前,首先......
  • 【Playwright+Python】系列教程(八)鉴权Authentication的使用
    写在前面还是有些絮叨的感觉,官方翻译和某些博主写那个玩楞,基本都是软件直接翻译后的产物。读起来生硬不说,甚至有的时候不到是什么意思,真的是实在不敢恭维。到底是什么意思?就是你已经登陆过一次,在Session、Cookie未失效的情况下,登录过一次后,下次就不用再走一遍登录的过程,从而缩......
  • 基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
    ......
  • Python和AI库NumPy(二):数组创建与操作的深入探索
    目录1.数组创建1.1基本数组创建1.2使用内置函数创建数组1.3特殊数组的创建2.数组的基本操作2.1数组属性2.2数组索引和切片2.3数组的形状操作2.4数组拼接与分割3.数组的数学操作3.1基本算术操作3.2广播机制3.3线性代数运算4.高级数组操作4.1花式......
  • 如何为本地python共享文件网页配置公网地址实现跨网络远程访问
    文章目录前言1.本地文件服务器搭建1.1.Python的安装和设置1.2.cpolar的安装和注册2.本地文件服务器的发布2.1.Cpolar云端设置2.2.Cpolar本地设置3.公网访问测试4.结语前言本文主要介绍如何在Windows系统电脑上使用python这样的简单程序语言,在自己的电脑上搭建一个......
  • 基于YOLOv10深度学习的交通信号灯检测识别系统【python源码+Pyqt5界面+数据集+训练代
    《博主简介》小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~......
  • 用Python简单操作MySQL!轻松实现数据读写
    PyMySQL是Python编程语言中的一个第三方模块,它可以让Python程序连接到MySQL数据库并进行数据操作。它的使用非常简单,只需要安装PyMySQL模块,然后按照一定的步骤连接到MySQL数据库即可。本文将介绍PyMySQL的安装、连接MySQL数据库、创建表、插入数据、查询数据、更新数据和删除数据......
  • [python][代码]Python中操作DataFrame的常用方法
    Python中操作DataFrame的常用方法主要依赖于pandas库,这是一个功能强大的数据分析工具。以下是一些基本和常用的DataFrame操作方法:1.创建DataFrame:pythonimportpandasaspddata={'Column1':[1,2,3],'Column2':['a','b','c']}df=pd.DataFrame(......
  • 使用 Python 优雅地编排 Dockerfile
    使用python替代dockercompose编排容器dockercompose是docker的容器编排工具,它是基于YAML配置,YAML是一种配置文件格式,支持传递环境变量,但是对于复杂的容器编排显得力不从心。于是我便开发这个程序,可以像写程序一样编排docker,可以充分发挥程序猿的想象力。pipi......