python tkinter.Radiobutton无法获得价值

时间:2016-05-01 02:55:49

标签: python-3.x tkinter

我用tkinter(python3)编写python代码,但是我遇到了一些问题。我有两个类_MainScreen_RegisterScreen(最后一个嵌套在_MainScreen中)。在_RegisterScreen我用tkinter.Radiobutton实现了一个简单的问题(选择你的性别:男性,女性)。我的想法是捕获用户选择,但是当我运行脚本时,分配给变量的值为空("")。但是,如果我单独运行类_RegisterScreen,它就可以工作。我希望你能告诉我我的错误在哪里。提前谢谢。

这是我的代码的抽象(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.

1 个答案:

答案 0 :(得分:1)

在对tkinter的RadioButton小工具如何工作进行一些研究之后,我相信我有一个解决你问题的方法:

这是您的新_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功能。

我相信您对RadioButton variablevalue属性实际上是什么感到困惑(就像我之前看到的那样)。

我详细了解了这些视频中的内容:https://www.youtube.com/watch?v=XNF-y0QFNcM

我希望这有帮助! 〜枪手