使用类在tktinter python中创建复选框
我试图使用类在tktinter python中创建多个复选框,但是由于某些原因,复选框没有显示出来,这就是我得到的错误 AttributeError:“裁剪”对象没有属性“tk” 这是我的密码使用类在tktinter python中创建复选框,python,oop,tkinter,widget,tk,Python,Oop,Tkinter,Widget,Tk,我试图使用类在tktinter python中创建多个复选框,但是由于某些原因,复选框没有显示出来,这就是我得到的错误 AttributeError:“裁剪”对象没有属性“tk” 这是我的密码 from tkinter import * from tkinter.ttk import * import tkinter as tk # python 3 screen = Tk() class crop: def __init__(self,sizename,sizevar,onvar
from tkinter import *
from tkinter.ttk import *
import tkinter as tk # python 3
screen = Tk()
class crop:
def __init__(self,sizename,sizevar,onvar):
sizevar= StringVar
self.tk.Checkbutton(screen, text=sizename, variable=sizevar, onvalue=onvar, offvalue='no')
self.pack()
def main():
first = crop('2.5','twofive','twofiveon')
second = crop('3','three','threeon')
screen.mainloop()
main()
提前感谢您的帮助。您需要执行以下操作:
def __init__(self,sizename,sizevar,onvar):
global screen # or pass it as __init__ parameter
sizevar= StringVar
b= tk.Checkbutton(screen, text=sizename, variable=sizevar, onvalue=onvar, offvalue='no')
b.pack()
您的代码有几处错误 首先,您需要在调用main之后而不是之前调用mainloop 其次,sizevar=StringVar需要是sizevar=StringVar 第三,这是抛出错误的那一行,您试图调用self.tk.Checkbutton,但您的裁剪对象尚未定义名为tk的属性。我不完全确定您想要完成什么,但我猜您只是想调用tk checkbutton,这意味着代码应该是tk.checkbutton 下一个问题是self.pack-self是裁剪对象。它不是一个小部件,因此没有pack方法。似乎您的目的是打包checkbutton,因此您需要保存对checkbutton的引用,然后在其上调用pack,例如:self.cb=tk.checkbutton。。。;自助包 另一个问题是您要导入tkinter两次。你应该只做一次。您需要从tkinter导入*和tkinter.ttk导入*中删除这两个文件。然后,使用tk。或者ttk。作为引用tkinter和ttk对象时的前缀 最后一个问题是您没有遵循指导原则,这使得其他程序员更难理解您的代码。具体来说,作物必须是作物 综上所述,您的代码应该如下所示:
import tkinter as tk
from tkinter import ttk
screen = tk.Tk()
class Crop:
def __init__(self,sizename,sizevar,onvar):
sizevar= tk.StringVar()
self.cb = tk.Checkbutton(screen, text=sizename, variable=sizevar, onvalue=onvar, offvalue='no')
self.cb.pack()
def main():
first = Crop('2.5','twofive','twofiveon')
second = Crop('3','three','threeon')
main()
screen.mainloop()
我说应该,因为你想做什么还不是100%清楚。由于您最初进行导入的方式,不清楚您是打算使用Checkbutton小部件的ttk版本还是tk版本。这是导入tkinter时通配符导入不好的原因之一。如果要使用ttk checkbutton,需要将该行更改为:
self.cb = ttk.Checkbutton
这就取消了类的使用,我需要使用类来缩短我的代码,因为我将创建20个复选框,谢谢你的帮助,尽管没有。您需要确定要从每个crop实例中检索的内容,并使其成为类的属性,例如self.sizevar=StringVarim非常困惑,您能给我完整的代码吗?谢谢,他们不需要将screen声明为全局变量,因为他们没有试图修改变量。全局变量在函数内部是可读的,无需声明为全局变量。声明这可能是一个好的实践,但这并不能回答OP的问题。哇,非常感谢,这是一个非常好的解释,说实话,我不知道tk和Ttk之间的区别,我只是在看一个教程,但是谢谢