python 单选按钮_Python Tkinter中的单选按钮值

I am trying to create a dialog box in Python using Tkinter. The goal is to have a dialog box with two radio buttons and an "OK" button. Radio button one selects the option "default". Radio button two selects the option "user defined." The "OK" button closes the window.

Question 1: How do I save the value from the radio button? That is, how do I pass the selected radio button to the rest of my script?

问题2:如何使第二个单选按钮包含用户文本输入(沿tkSimpleDialog.askstring行)?我希望该按钮显示一个单选按钮,一个提示(“输入值:”)和一个供用户输入文本的空间-所有这些都作为一个单选按钮选项在一行上全部显示。

因此,整个对话框的顶部单选按钮应为普通单选按钮,第二个按钮指定用户输入并包括用于该用户输入的空格(以及OK按钮)。

到目前为止,我打开了一个带有两个选项的对话框,但是该值没有传递给我可以看到的任何内容;即使我选择单选按钮,选择也会返回0。

在任何一个问题上的任何帮助,将不胜感激,谢谢。

到目前为止,这是我的脚本:

fromTkinterimport*master=Tk()var=IntVar()Label(master,text="Select OCR language").grid(row=0,sticky=W)Radiobutton(master,text="default",variable=var,value=1).grid(row=1,sticky=W)Radiobutton(master,text="user-defined",variable=var,value=2).grid(row=2,sticky=W)Button(master,text="OK",command=master.quit).grid(row=3,sticky=W)selection=var.get()print"Selection:",selection

mainloop()#If selection == 0 do one thing#If selection == 1 do something else...

解决方案

派对晚了一点,但是我在尝试在Tkinter单选按钮上找到东西时偶然发现了这个问题。

问题1:

我改变了三件事:

1)我立即设置的值var给1你定义后。这是通过执行操作来完成的var.set(1),将确保选择了您的第一个单选按钮(其值为1,如稍后在代码中定义的那样)。

2)我已将您的master.quit命令替换为quit_loop。在此功能中:

该var值通过print和get语句打印。该get会“得到”的当前值var,这取决于哪个单选按钮被选中的。

我在此函数内创建了一个全局变量,该变量将get成为的当前值var。

我在其中添加了括号,master.quit()因为它不再位于单选按钮的命令中。请注意,如果您打算使用IDLE,则master.destroy()可能是更合适的选择。

3)由于selection在函数中创建了变量,我们现在将所需的值存储在变量中。if在代码的末尾有一个最终声明,表明它是有效的。

fromTkinterimport*master=Tk()var=IntVar()var.set(1)defquit_loop():print"Selection:",var.get()globalselection

selection=var.get()master.quit()Label(master,text="Select OCR language").grid(row=0,sticky=W)Radiobutton(master,text="default",variable=var,value=1).grid(row=1,sticky=W)Radiobutton(master,text="user-defined",variable=var,value=2).grid(row=2,sticky=W)Button(master,text="OK",command=quit_loop).grid(row=3,sticky=W)master.mainloop()ifselection==1:print"My Value is equal to one."elifselection==2:print"My value is equal to two."

问题2:

我会保持简单,仅在您的单选按钮之后添加一个标签和一个输入框。这意味着我们还必须使用列,因为您在先前的代码中没有定义任何列,这使所有内容默认为列0。我们希望您的第二个单选按钮为“ radio,label,entry”,该列需要三列。

1)先前包含的标签"Select OCR language"将跨越三列,并columnspan=3添加到网格参数中。第一个单选按钮也是如此。

2)我在您的第二个单选按钮之后添加了一个Label和一个Entry。请注意,列从0到2,定义了我们的三列。标签具有简单"Enter value:"文本,而条目具有变量textvariable=entry_text。我将此变量添加entry_text到了代码的开头,并立即将其值设置为###。请注意,这是一个string(因此,文本变量),因此仅对整数进行检查取决于您。

3)当然,这没有链接到第二个单选按钮。如果我们选择它,它的值为2,而不是Entry小部件的值。这就是为什么在先前创建的quit_loop函数中,添加了一条小if语句,该语句将条目的值分配给selection是否选择了第二个单选按钮。

fromTkinterimport*master=Tk()var=IntVar()var.set(1)entry_text=StringVar()entry_text.set("###")defquit_loop():print"Selection:",var.get()globalselection

selection=var.get()ifselection==2:selection=entry_text.get()master.quit()# Add columnspan to these widgetsLabel(master,text="Select OCR language").grid(row=0,sticky=W,columnspan=3)Radiobutton(master,text="default",variable=var,value=1).grid(row=1,sticky=W,columnspan=3)# Order these widgets in their appropriate columnsRadiobutton(master,variable=var,value=2).grid(row=2,sticky=W,column=0)Label(master,text="Enter value:").grid(row=2,sticky=W,column=1)Entry(master,textvariable=entry_text).grid(row=2,sticky=W,column=2)# Example of what happens without columnspanButton(master,text="OK",command=quit_loop).grid(row=3,sticky=W)master.mainloop()printselection

小费

如果这个简单的GUI仍然很小,则可以用这种方式编写代码。但是,在此基础上进一步扩展,我建议您采用面向对象的方法,因为它确实可以大大提高可读性,尤其是在定义函数时。这样就不必事先定义它们。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值