2017-04-20 1 views
1

다시. : p 코드를 줄이기 위해 그룹에 RadioButton을 정의했습니다. 그런데 어떻게이 방법으로 여러 개의 radioButton을 만들 수 있습니까? 예를 들어 두 개의 목록을 만들고 싶지만 두 가지 모두 하나만 선택해야합니다. 당신은 단지 각 라디오 버튼 그룹을 variable 자체를 줄 필요가Python - Tkinter : 여러 개의 라디오 버튼을 만들려면 어떻게해야합니까?

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

: 다음은 내 코드입니다. 그렇다면 ShowChoicevariable.get()을 어떻게 호출하는지 어떻게 알 수 있습니까? 음,이를 처리하는 한 가지 방법은 command 콜백 함수를 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을 게시하는 것이 좋습니다.

내가 쉽게 파이썬 3에서 프로그램을 실행할 수 있도록하는 print 함수 호출에 print 문을 변환 한, 당신이 오직 할 필요가있는 import 성명에서 tkinter-Tkinter을 변경할 수 있습니다.


나는 "스타"가져 오기도 제거했습니다. 물론 Tkinter 예제에서는 "star"가져 오기를 사용하지만 권장하지는 않습니다. Python 2에서는 170 개가 넘는 이름 (파이썬 3에서는 약 130 개의 이름)을 사용하여 이름 공간을 오염시킵니다. 이는 지저분하고 이름 충돌을 초래할 수 있습니다. import Tkinter as tk을 입력 할 때 좀 더 많은 타이핑이 있지만 Tkinter 이름이 분명하기 때문에 코드를 읽기 쉽게 만듭니다.

+0

네, 작동합니다. 고맙습니다. :) Ps : 코드를 다시 게시하면 알 수 있습니다! 나는 새롭고 아직 경험이 없습니다. – LoveSpock

+0

잊어 버린 - 죄송합니다. ^^ – LoveSpock

관련 문제