我一直在尝试创建一个名为vwin的类,它可以创建Tk或顶级窗口。不幸的是,它返回一个错误:
Traceback (most recent call last):
File "C:\Users\RELIC\Desktop\textpad.py", line 17, in <module>
sub = vwin(['Sub Window','640x480-25-25','normal','window'],root)
File "C:\Users\RELIC\Desktop\textpad.py", line 9, in __init__
window = Toplevel(master)
File "C:\Python33\lib\tkinter\__init__.py", line 2136, in __init__
BaseWidget.__init__(self, master, 'toplevel', cnf, {}, extra)
File "C:\Python33\lib\tkinter\__init__.py", line 2086, in __init__
BaseWidget._setup(self, master, cnf)
File "C:\Python33\lib\tkinter\__init__.py", line 2064, in _setup
self.tk = master.tk
AttributeError: 'vwin' object has no attribute 'tk'
这是我的密码:
###############################################################################
from tkinter import *
class vwin():
def __init__(self,args,master=None):
if args[3].lower() == 'tk':
window = Tk()
else:
window = Toplevel(master)
window.title(args[0])
window.geometry(args[1])
window.state(args[2])
root = vwin(['Main Window','640x480+25+25','normal','Tk'])
sub = vwin(['Sub Window','640x480-25-25','normal','window'],root)
我看到很多问题。你知道吗
在您的自定义类中,您只需创建
Tk()
对象并将其赋给局部变量window
,该变量的作用域在__init__()
函数结束时结束,并且很可能被垃圾收集。应该将Tk()
对象保存为实例变量。您正在将类型为
vwin
的对象作为主对象发送给Sub window
vwin构造函数。然后您试图调用Toplevel()
对象上的vwin
,这将不起作用。您需要在那里使用先前保存的Tk()
对象。您永远不会启动
Tk()
的mainloop(),因此当您将程序作为脚本运行时,它将在启动之前结束。我认为有很多更好的方法可以做到这一点,但有一种方法可以让它为你工作-
相关问题 更多 >
编程相关推荐