Tkinter:如何设置ttk.Radiobutton激活并获取其值?

问题描述 投票:0回答:5

1)我需要设置默认激活的三个 ttk.Radiobuttons 之一 当我启动我的 GUI 应用程序时。
我该怎么做?

2)我还需要检查我的 ttk.Radiobuttons 之一是否是 由用户激活/点击。
我该怎么做?

rb1 = ttk.Radiobutton(self.frame, text='5', variable=self.my_var, value=5)
rb2 = ttk.Radiobutton(self.frame, text='10', variable=self.my_var, value=10)
rb3 = ttk.Radiobutton(self.frame, text='15', variable=self.my_var, value=15)
self.rb1.grid(row=0)
self.rb2.grid(row=1)
self.rb3.grid(row=2)
python python-2.7 tkinter ttk
5个回答
21
投票

使用

self.my_var.set(1)
设置单选按钮,其中
text='5'
作为默认 RadioButton。

要获取所选的一个,您必须调用一个函数

rb1 = ttk.Radiobutton(self.frame, text='5', variable=self.my_var, value=5,command=self.selected)
rb2 = ttk.Radiobutton(self.frame, text='10', variable=self.my_var, value=10,command=self.selected)
rb3 = ttk.Radiobutton(self.frame, text='15', variable=self.my_var, value=15,command=self.selected)
self.rb1.grid(row=0)
self.rb2.grid(row=1)
self.rb3.grid(row=2)

def selected(self):
     if self.my_var.get()==5:
        "do something"
     elif self.my_var.get()==10:
        "do something"
     else:
        "do something"

15
投票

对于你的第一个问题,一个方便直接的方法是调用

invoke
方法:

rb2.invoke()

请注意,这也会运行与此按钮关联的任何

command

请参阅 Ttk::radiobutton 调用文档


3
投票

您可以使用

rb1.state['selected']
将默认值设置为
rb1
self.my_var.get()
来获取单选按钮的值(即文本变量)。


3
投票

我只是在Gogo的答案中添加一些内容,但我无法发表评论,因为我没有足够的声誉。

在单选按钮之前添加

self.my_var=tk.IntVar()
,否则您的程序将不知道该变量。请参阅变量类了解更多信息

例如,就我而言,我需要一个 StringVar(): 这适用于 python 3.* 将

tkinter
更改为
Tkinter
对于 python 2 (我不是 100% 确定)

import tkinter as tk
from tkinter import ttk

class XFile_Page(tk.Frame):
    ...

    self.joinType = tk.StringVar()
    self.rbLeft = ttk.Radiobutton(self.frameRadioButtons, text='left', variable=self.joinType, value='left',command=self.RadioBtnSelected)
    self.rbRight = ttk.Radiobutton(self.frameRadioButtons, text='right', variable=self.joinType, value='right',command=self.RadioBtnSelected)

    self.rbLeft.grid(row=0)
    self.rbRight.grid(row=1)

    #select the rbLeft radiobutton
    self.rbLeft.invoke()

    def RadioBtnSelected(self):
        print(self.joinType.get())

0
投票

回答第一个问题:

如果你不喜欢使用变量,也不想使用“rb1.invoke()”,你可以使用:

rb1.select()

在此处阅读文档

适用于 Python 3.10.12 [GCC 11.4.0]

© www.soinside.com 2019 - 2024. All rights reserved.