我所有的单选按钮都是用Python';斯特金特酒店
我正在尝试制作一个简单的比萨饼订购GUI,但是当我加载比萨饼尺寸的单选按钮时,所有的按钮都会同时被选中 编辑:修复后,启动时按钮不再全部选中。现在,它们在启动时都不会被选中,但当您将鼠标悬停在按钮上时,它们会自行选择,并且可以选择多个选项 以下是迄今为止的代码:我所有的单选按钮都是用Python';斯特金特酒店,python,tkinter,Python,Tkinter,我正在尝试制作一个简单的比萨饼订购GUI,但是当我加载比萨饼尺寸的单选按钮时,所有的按钮都会同时被选中 编辑:修复后,启动时按钮不再全部选中。现在,它们在启动时都不会被选中,但当您将鼠标悬停在按钮上时,它们会自行选择,并且可以选择多个选项 以下是迄今为止的代码: from tkinter import * class Pizza(Frame): """Initialize the Pizza program""" def __init__(self, master):
from tkinter import *
class Pizza(Frame):
"""Initialize the Pizza program"""
def __init__(self, master):
"""This sets up the Pizza program"""
super(Pizza, self).__init__(master)
self.grid() # This is absolutely vital for future GUI projects!
self.create_widgets()
self.name = ""
self.size = StringVar()
self.size.set(value="small")
def create_widgets(self):
"""This creates the input types"""
# Adds text field for username entry
# Not important for the question.
# Adds Radiobuttons for users to interact with
self.size_label = Label(self, text="Size:")
self.size_label.grid(row=1, column=0)
self.size_sml = Radiobutton(self, variable=self.size, value="small", text="Small")
self.size_sml.grid(row=1, column=1)
self.size_med = Radiobutton(self, variable=self.size, value="medium", text="Medium")
self.size_med.grid(row=1, column=2)
self.size_lrg = Radiobutton(self, variable=self.size, value="large", text="Large")
self.size_lrg.grid(row=1, column=3)
root = Tk()
root.title("Order Pizza")
root.resizable(width=False, height=False)
app = Pizza(root)
root.mainloop()
我不确定是什么问题。代码的这一部分似乎很好。
话虽如此,我还是建议您在存储人们订购的尺码时,最好使用数字,例如小=0中=1大=2。然后,您可以在代码中稍后替换它,因为现在它有点不寻常。在
命令
属性中给出的函数调用不应包含括号()
这是因为当使用括号提及函数时,在调用create\u widgets
函数时会调用该函数
您应将其更改为
self.size\u sml=Radiobutton(self,command=self.small,text=“small”)
“所有按钮都将同时被选择。”:您不使用变量=
,因此,它是None
阅读如何使用。我一遍又一遍地阅读它,但我不能真正理解它来帮助解决我遇到的新问题。你的错误是,在调用之后定义self.size=StringVar()
。创建小部件()
不幸的是,您选择了名称self.size
,这是一个默认的小部件属性。因此,您不会收到错误消息,但Radiobutton
对象的行为异常。解决方案:在调用def create\u widgets
之前,不要在继承的对象中使用名称self.size
,并定义StringVar()
对象。新手犯了错误,我知道这会把事情搞得一团糟。谢谢你的帮助。现在可以了!虽然这可能是一个很好的建议,但它并不能解决人们提出的问题。