我的Radiobutton在创作时进行了检查

时间:2018-01-13 17:12:32

标签: python tkinter

我的问题是,在创建Radiobutton时会自动检查它,我无法取消选中它。我在x和y尺寸的框架内创建它。 我已经尝试了SharedWorker功能但它什么都没改变 (Python 3.6)

代码:

.deselect()

它的照片: photo

3 个答案:

答案 0 :(得分:2)

首先,如果我们只是想修改你的代码以便单独给我们一个未经检查的单选按钮,那么这就可以了。

from tkinter import Tk, IntVar, Radiobutton, mainloop, ttk

root = Tk()

frm = ttk.Frame(root)

frm.place(x = 0, y = 0, width = 1000, height = 1000)

v = IntVar()

Ek = ttk.Radiobutton(frm, text = "text", variable = v, value = 1)

Ek.place(x = 100, y = 100)

mainloop()

除了在开始和结束时进行设置的样板外,我们在原始代码中唯一需要更改的是将参数variable = v, value = 1添加到Radiobutton调用中。

这些额外的论点在孤立中并没有真正意义,原因同样地说,单个单选按钮通常没有意义。一旦我们添加其中两个,我们就可以看到更好的了。

在@Stack发布的文档(this thing)中,第一个代码示例如下所示:

from Tkinter import *

master = Tk()

v = IntVar()

Radiobutton(master, text="One", variable=v, value=1).pack(anchor=W)
Radiobutton(master, text="Two", variable=v, value=2).pack(anchor=W)

mainloop()

如果我们运行它,默认情况下我们会得到两个未经检查的单选按钮。如果我们将value=1部分更改为value=0,则会显示第一个单选按钮,如果我们将value=2更改为value=0,则会显示第二个单选按钮。所以value=0似乎给了我们默认选中的按钮,但我们还不知道为什么。让我们再试一试。

如果我们尝试删除新样本中的片段,直到我们回到与您最初写的内容非常相似的内容,我们可以看看发生了什么。完全删除value个参数并像这样运行它:

Radiobutton(master, text="One", variable=v).pack(anchor=W)
Radiobutton(master, text="Two", variable=v).pack(anchor=W)

默认情况下我们没有选中任何按钮,但是进一步删除variable参数以使代码看起来像您的原始调用:

Radiobutton(master, text="One").pack(anchor=W)
Radiobutton(master, text="Two").pack(anchor=W)

默认情况下为我们提供了两个已选中的按钮,这会让我们回到原来的问题。

基本上,我们遇到了各种奇怪的案例,因为我们刚刚开始摆弄代码并忘记单选按钮实际代表的内容。

单选按钮的概念首先表示变量的。不是整个变量,只是它可能等于的一个东西。单元格组合在一起,给我们一个离散变量的直观表示:一个可以在N个状态中的一个的东西。

因此,Radiobuttons的API自然要求我们提供一些信息,比如“你希望我们用什么python变量来保存这些值?” (这大致是variable关键字)和“你希望我们在幕后将这些按钮粘合到哪些值以区分不同的状态?” (这是value关键字)。

正如预期的那样,代码在上面的值为1和2的情况下效果最好,因为在这种情况下,代码在概念上正确地反映了单选按钮的实际内容。当我们碰撞这些值或将它们设置为零或将它们完全抛弃时,事情变得有点怪异且不太可预测,因为我们正在处理tkinter API的实现细节,而不是简单的单选按钮概念。 API旨在实现。

笔记本电脑即将死亡,所以我要继续发送。希望这不是太罗嗦。祝好运。 :)

答案 1 :(得分:1)

Radiobuttons需要与其中一个特殊的Tkinter变量(StringVar等)相关联,并且设计为两个或更多个组。如果未指定变量,将为您创建一个变量。 Radiobutton的默认值是空字符串,也是默认变量将被设置为。

答案 2 :(得分:0)

只需为声明的变量分配一个不同的值

from tkinter import Tk, IntVar, Radiobutton, mainloop, ttk

root = Tk()
frm = ttk.Frame(root)
frm.place(x=0,y=0,width=100,height=400)


language=StringVar(value='portuguese')


Ek = ttk.Radiobutton(frm,variable="language",text="spanish",value="spanish")
Ek.place(x=10,y=50)
Ek = ttk.Radiobutton(frm,variable="language",text="english",value="english")
Ek.place(x=10,y=85)
mainloop()