2016-05-01 125 views
1

我正在用tkinter(python3)編寫python代碼,但我遇到了一些問題。我有兩個類_MainScreen_RegisterScreen(最後一個嵌套在_MainScreen)。在_RegisterScreen我實施了一個簡單的問題與tkinter.Radiobutton(選擇你的性別:男性,女性)。這個想法是捕獲用戶選擇,但是當我運行腳本時,分配給該變量的值爲空("")。但是,如果我單獨運行類_RegisterScreen,它將起作用。我希望你能告訴我我的錯誤在哪裏。提前致謝。python tkinter.Radiobutton無法獲得值

這裏是我的代碼抽象(32線)(250線):

import tkinter 

class _MainScreen(tkinter.Frame): 
    def __init__(self): 
     self.root = tkinter.Tk() 
     self.new_account(self.root) 
     self.root.mainloop() 
    def new_account(self, frame): 
     tkinter.Button(frame, text="Create new account", 
      command=self.create_new_account).pack(anchor="center", pady=(0,15)) 
    def create_new_account(self): 
     _RegisterScreen() 

class _RegisterScreen(tkinter.Frame): 
    def __init__(self): 
     self.root = tkinter.Tk() 
     tkinter.Label(self.root, text="Sex").grid(row=1, padx=(0,10), sticky="w") 
     self.sex_option = tkinter.StringVar() 
     tkinter.Radiobutton(self.root, text="Male", variable=self.sex_option, 
      value="Male", command=self._selected).grid(row=1, column=1) 
     tkinter.Radiobutton(self.root, text="Female", variable=self.sex_option, 
      value="Female", command=self._selected).grid(row=1, column=2) 
     tkinter.Button(self.root, text="Submit", 
      command=self._login_btn_clickked).grid(row=3, columnspan=4, pady=20) 
     self.root.mainloop() 
    def _login_btn_clickked(self): 
     sex = self._selected() 
     print(sex) 
    def _selected(self): 
     return self.sex_option.get() 

_MainScreen() 
#_RegisterScreen() # comment the above line and uncomment this line 
        # to test the _RegisterScreen object alone. 
+0

我一直在這個工作了一段時間,我仍然無法解決這個問題。我認爲它與sex_option的範圍有關。 –

+0

@GunnerStone,我已經兩個星期了。我認爲答案應該是......愚蠢的。但是我找不到它。這是令人沮喪的,因爲我='( –

回答

1

上做的Tkinter的單選按鈕部件的工作原理經過一番研究,我相信我有一個解決問題的方法:

這是你的新_RegisterScreen功能:

class _RegisterScreen(tkinter.Frame): 

    def __init__(self): 
     self.gender = "NA" #Variable to be changed upon user selection 

     self.root = tkinter.Tk() 
     tkinter.Label(self.root, text="Sex").grid(row=1, padx=(0,10), sticky="w") 

     self.sex_option = tkinter.StringVar() 

     #This Radiobutton runs the setMale function when pressed 
     tkinter.Radiobutton(self.root, text="Male", variable=self.sex_option, 
      value="Male", command=self.setMale).grid(row=1, column=1) 

     #This Radiobutton runs the setFemale function when pressed 
     tkinter.Radiobutton(self.root, text="Female", variable=self.sex_option, 
      value="Female", command=self.setFemale).grid(row=1, column=2) 

     tkinter.Button(self.root, text="Submit", 
      command=self._login_btn_clickked).grid(row=3, columnspan=4, pady=20) 
     self.root.mainloop() 

    def _login_btn_clickked(self): 
     sex = self.gender #gets the value stored in gender and assigns it to sex 
     print(sex) 

    def setMale(self): 
     self.gender="Male" #sets gender to Male 

    def setFemale(self): 
     self.gender="Female" #sets gender to Female 

最後,要爲RadioButton運行2個單獨的函數。

當男性Radiobutton被點擊時,它運行setMale函數。

當女性Radiobutton被點擊時,它運行setFemale函數。

我相信你對RadioButtonvariablevalue屬性實際上是什麼感到困惑(就像我在進一步研究之前)。

我更多地瞭解了什麼那些在這個視頻做的那些:https://www.youtube.com/watch?v=XNF-y0QFNcM

我希望這有助於! 〜炮手

+0

是的,這是有效的,謝謝! –

+1

第4行中的性別var應改爲self.gender –

+0

@IvánCastro編輯製作 –