我用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.
答案 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
variable
和value
属性实际上是什么感到困惑(就像我之前看到的那样)。
我详细了解了这些视频中的内容:https://www.youtube.com/watch?v=XNF-y0QFNcM
我希望这有帮助! 〜枪手