tkinter 单选按钮未在类中显示值

Posted

技术标签:

【中文标题】tkinter 单选按钮未在类中显示值【英文标题】:tkinter Radiobuttons not displaying value in class 【发布时间】:2021-07-25 00:57:48 【问题描述】:

我目前是一名正在学习 python 的大学生,并且在使用 tkinter 时遇到了一些 Radiobutton 问题。当使用多个类时,我的单选按钮不会更新它们的值,并且总是会打印出.set() 方法的值。这是一段类似于我实验室中的代码的 sn-p,但它只是问题区域。

import matplotlib
matplotlib.use("TkAgg")
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
from matplotlib.figure import Figure


class test(tk.Tk):
    def __init__(self):
        super().__init__()
        self.TOPNUM=15


class dialogWindow(test):
    def __init__(self):
        super().__init__()

        self.rc=tk.IntVar()
        self.rc.set(20)


        self.radio1=tk.Radiobutton(self,text="1",value=1,variable=self.rc,command=self.rc.get())
        self.radio2=tk.Radiobutton(self,text="2",value=2,variable=self.rc,command=self.rc.get())

        self.button=tk.Button(self,text="CLick Me!",command=lambda : self.clicked(self.rc.get()))

        self.radio1.pack()
        self.radio2.pack()
        self.button.pack()
        self.rc.set(20)

    def clicked(self,value):
        print(value)


def run():
    win=test()
    win.title("Top Colleges")
    win.minsize(200,200)
    header=tk.Label(win,text="College Lookup",fg="blue",font=15)
    header.pack()

    dataButton=tk.Button(win,text="By Data",width=8, command= lambda : dialogWindow())

    dataButton.pack()

    win.mainloop()

run()

但是,当我尝试只在一个类中编写它时,它确实有效,但我不知道为什么。

class dialogWindow(tk.Tk):
    def __init__(self):
        super().__init__()

        self.rc=tk.IntVar()
        self.rc.set(20)

        self.radio1=tk.Radiobutton(self,text="1",value="1",variable=self.rc,command=self.rc.get())
        self.radio2=tk.Radiobutton(self,text="2",value="2",variable=self.rc,command=self.rc.get())

        self.button=tk.Button(self,text="CLick Me!",command=lambda : self.clicked(self.rc.get()))

        self.radio1.pack()
        self.radio2.pack()
        self.button.pack()
        self.rc.set(1)

    def clicked(self,value):
        print(value)


def run():
    win=dialogWindow()
    win.minsize(200,200)
    dataButton=tk.Button(win,text="By Data",width=8, command= lambda:dialogWindow())

    dataButton.grid(row=1,column=2,padx=5)

    win.mainloop()
run()

【问题讨论】:

【参考方案1】:

解释很简单,因为继承而创建了两个Tk()实例。现在你必须指定IntVar() 应该属于哪个实例,因为它总是将自己设置为第一个创建的实例(win),但在这里你不希望这样。所以:

class dialogWindow(test):
    def __init__(self):
        super().__init__()
        
        self.rc=tk.IntVar(self)
        .....

【讨论】:

哇,这么简单的解决方案。谢谢你的解释!

以上是关于tkinter 单选按钮未在类中显示值的主要内容,如果未能解决你的问题,请参考以下文章

Python Tkinter 中的单选按钮值

Python里tkinter如何重置单选按钮?

如何在不单击tkinter python的情况下读取单选按钮值

Tkinter 单选按钮未正确选择

基于选定的单选按钮在 Tkinter 中启动命令?

[tkinter]Radiobutton单选按钮的使用