2017-06-01 22 views
0

*kwargsを使用してラジオボタンで選択メニューを作成しようとしました。 残念ながら送信された変数の順序は、Easy、Medium、Hard、Extremeのように保持されません。そして、vを特定の値に設定したとしても、すべての選択肢が一度に選択されます。ラジオボタンtkinterを自動的に選択

ここに何か不足していますか?

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import Tkinter as tk 
from Tkinter import * 


class MainApplication(tk.Frame): 
    def __init__(self, parent, *args, **kwargs): 
     tk.Frame.__init__(self, parent, *args, **kwargs) 
     self.parent = parent 

    def onClick(self, event): 
     print("Clicked") 

    def qChoice(self, **kwargs): 
     v = IntVar() 
     v.set(1) 
     for key, value in kwargs.iteritems(): 
      self.Rbutton = Radiobutton(text=key, variable=v, value=value) 
      self.Rbutton.grid(sticky=W) 

    def basics(self): 
     self.label = Label(text="Enter name:") 
     self.label.grid(column=0, row=0, sticky="E") 
     self.entry = Entry() 
     self.entry.grid(column=1, row=0) 
     self.button = Button(text="Enter") 
     self.button.bind("<Button-1>", self.onClick) 
     self.button.grid(column=3, row=0) 
     self.qChoice(Easy=1,Medium=2,Hard=3,Extreme=4) 

if __name__ == "__main__": 
    root = tk.Tk() 
    App = MainApplication(root) 
    App.basics() 
    root.mainloop() 

答えて

1

あなたは関数が終了したときにゴミが収集されてきvのローカル変数を使用しています。あなたは両方のimport文を必要としない、サイドノートで

def qChoice(self, **kwargs): 
    self.v = Intvar() 
    ... 

:あなたは永久的な参照を保持する必要があります。いずれか一方を使用しますが、両方を使用することはできません。理想的には、最初のものを使用してください:

import Tkinter as tk 
+0

私もそのように表示されませんでした、ありがとうございました。 * kwargsが正しく反復されない理由を知っていますか? – Prixeler

1

IntVar()はローカルであり、ガーベージされています。あなたのための

def qChoice(self, **kwargs): 
    # changed to self.v from v 
    self.v = IntVar() 
    # .set(None) leaves all the self.v instances blank 
    # if you did .set('1'), the first one will be auto-selected 
    # you can also remove this line if you want them to start blank 
    self.v.set(None) 
    for key, value in kwargs.iteritems(): 
     self.Rbutton = Radiobutton(text=key, variable=self.v, value=value) 
     self.Rbutton.grid(sticky=W) 

同様のトピック:

Reference 1

Reference 2

関連する問題