聚会晚了一点,但是我在尝试在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在代码的末尾有一个最终声明,表明它是有效的。
from Tkinter import *master = Tk()var = IntVar()var.set(1)def quit_loop(): print "Selection:",var.get() global selection 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()if selection == 1: print "My Value is equal to one."elif selection == 2: print "My value is equal to two."
问题2:
我会保持简单,只需在您的单选按钮之后添加标签和输入框即可。这意味着我们还必须使用列,因为您在先前的代码中没有定义任何列,这使所有内容默认为列0。我们希望您的第二个单选按钮为“
radio,label,entry”,该列需要三列。
1)先前包含的标签
"Select OCR language"将跨越三列,并
columnspan=3添加到网格参数中。第一个单选按钮也是如此。
2)我在您的第二个单选按钮之后添加了一个
Label和一个
Entry。请注意,列从0到2,定义了我们的三列。标签具有简单
"Entervalue:"文本,而条目具有变量
textvariable=entry_text。我将此变量添加
entry_text到了代码的开头,并立即将其值设置为
###。请注意,这是一个
string(因此,
文本 变量),因此仅由整数决定是否添加检查。
3)当然,这没有链接到第二个单选按钮。如果我们选择它,它的值为2,而不是
Entry小部件的值。这就是为什么在先前创建的
quit_loop函数中,添加了一条小
if语句,该语句将条目的值分配给
selection是否选择了第二个单选按钮。
from Tkinter import *master = Tk()var = IntVar()var.set(1)entry_text = StringVar()entry_text.set("###")def quit_loop(): print "Selection:",var.get() global selection selection = var.get() if selection == 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()print selection小费
如果这个简单的GUI仍然很小,则可以用这种方式编写代码。但是,在此基础上进行大量扩展,我建议您采用面向对象的方法,因为它确实可以大大提高可读性,尤其是在定义函数时。这样,就不必事先定义它们。



