2017-04-20 13 views
1

もう一度。 :p グループ内にラジオボタンを定義してコードを減らしました。しかし、私はこのように複数のradioButtonをどのように作成できますか?たとえば、2つのリストを作成したいのですが、どちらも選択肢が1つだけ必要です。あなただけの各ラジオボタングループに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

: はここに私のコードです。しかし、ShowChoiceはどのようにvariable.get()と呼ぶべきですか?つまり、commandコールバック関数をデフォルトの引数としてvariableを持つラムダにすることです。そして、我々がそれをやっている間に、デフォルトのargとしてtxtも渡すかもしれません。

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を投稿するのがよい考えです。

は、私はそれが簡単にPythonの3のあなたのプログラムを実行できるようにすることprint関数呼び出しにあなたのprint文を変換しましたが、すべてを行う必要があるimport文でtkinterからTkinterを変更です。


また、「スター」インポートを削除しました。確かに、Tkinterの例では "star"インポートを使用していますが、Python 2では170以上の名前(Python 3では約130の名前)を使ってネームスペースを汚染してしまい、名前が衝突する可能性があります。 import Tkinter as tkを実行したときにもう少しタイピングしていますが、Tkinterの名前が明白なので、コードを読みやすくしています。

+0

ええ、それは動作します、ありがとう。 :) Ps:コードをもう一度投稿すれば、これに気付くでしょう!私は新しく、私はまだ経験していません。 – LoveSpock

+0

忘れました - 申し訳ありません。 ^^ – LoveSpock

関連する問題