我再次。 :p 我已在组中定义RadioButtons以减少我的代码。但是我怎么能用这种方式创建多个radioButton?例如,我想创建两个列表,但在两者中我只想选择一个选项。 这是我的代码:
from Tkinter import *
master = Tk()
var = IntVar()
var.set(1)#Wahl inizialisieren
scrollbar = Scrollbar(master)
scrollbar.pack(side=RIGHT, fill=Y)
master.geometry('1000x500') #Abmessung Fenster
master.title('test') #Tittel Fenster
def create_window(): #Definion und Festlegung neues Fenster
toplevel = Toplevel()
toplevel.title('result')
toplevel.geometry('1500x1000')
toplevel.focus_set()
sex = [
("male",1),
("female",2),
("male1",3),
("female1",4),
]
test = [
("test",5),
("test1",6),
("test2",7),
("test3",8),
]
def ShowChoice():
print var.get()
#Erzeugung
Checkliste----------------------------------------------------------------
Label(master,
text='''choose one answer:''',
padx = 20).pack()
for txt, val in sex:
Radiobutton(master,
text=txt,
justify = LEFT,
padx = 20,
variable=var,
variable=v,
command=ShowChoice,
value=val).pack(anchor=N)
Label(master,
text='''choose one answer:''',
padx = 20).pack()
for txt, val in test:
Radiobutton(master,
text=txt,
justify = LEFT,
padx = 20,
variable=var,
variable=v1,
command=ShowChoice,
value=val).pack(anchor=N)
#-------------------------------------------------------------------------
Button(master, text='forward', command=create_window).pack(padx=5,
anchor=N, pady=4)
master.mainloop()
答案 0 :(得分:0)
您只需要为每个Radiobutton组提供自己的variable
。但是ShowChoice
如何知道要variable
调用.get()
的内容?好吧,处理它的一种方法是使command
回调函数成为一个lambda,其variable
作为默认参数。虽然我们这样做,但我们也可以将txt
作为默认arg传递。
from __future__ import print_function
import Tkinter as tk
master = tk.Tk()
sex = [
("male", 1),
("female", 2),
("male1", 3),
("female1", 4),
]
test = [
("test", 5),
("test1", 6),
("test2", 7),
("test3", 8),
]
def ShowChoice(text, v):
print(text, v.get())
varsex = tk.IntVar()
varsex.set(sex[0][1])
tk.Label(master, text='Choose one answer:').pack()
for txt, val in sex:
tk.Radiobutton(master, text=txt, variable=varsex, value=val,
command=lambda t=txt, v=varsex: ShowChoice(t, v)).pack(anchor=tk.N)
vartest = tk.IntVar()
vartest.set(test[0][1])
tk.Label(master, text='Choose one answer:').pack()
for txt, val in test:
tk.Radiobutton(master, text=txt, variable=vartest, value=val,
command=lambda t=txt, v=vartest: ShowChoice(t, v)).pack(anchor=tk.N)
master.mainloop()
我已经修改了程序中与您的问题无关的各种内容。发布一个专注于实际程序的MCVE是一个好主意,而不是用不相关的东西膨胀你的问题代码。
我已将您的print
语句转换为print
函数调用,以便更轻松地在Python 3上运行您的程序,您只需将Tkinter
更改为{{ 1 {}在tkinter
语句中。
我也摆脱了那个“明星”的导入。当然,很多Tkinter示例使用“star”导入,但不推荐使用:它在Python 2中使用超过170个名称(以及Python 3中的大约130个名称)污染您的名称空间,这很混乱并且可能导致名称冲突。虽然在执行import
时会有更多的输入,但它使代码更容易阅读,因为很明显哪些名称是Tkinter名称。