我正在学习如何使用Tkinter制作GUI应用程序,我无法弄清楚为什么我无法通过类__init__
函数传递宽度和高度参数。
编辑:对不起,很兴奋。它正在做的是告诉我,我传递了太多的论据。无论我如何重新排列类__init__
和Frame
__init__
的参数,都没有任何变化。它要么太多,要么不够。
Edit_2:好的,这样运行没有错误。但它仍然没有调整帧的大小。
以下是我正在使用的内容:
#!/usr/bin/python
from Tkinter import *
class App(Frame):
def __init__(self, parent, width, height):
Frame.__init__(self, parent)
self.parent = parent
self.width = width
self.height = height
self.initUI()
def initUI(self):
self.parent.title("App")
self.grid()
def main():
root = Tk()
app = App(root, 300, 250)
root.mainloop()
if __name__ == '__main__':
main()
答案 0 :(得分:4)
self.width = width
不会更改帧大小,因为帧使用不同的方法来更改大小。
第一种方法:您可以使用Frame.__init__
。
Frame.__init__(self, parent, width=width, height=height)
请参阅:
from tkinter import *
class App(Frame):
def __init__(self, parent, width, height):
Frame.__init__(self, parent, width=width, height=height)
self.parent = parent
self.initUI()
def initUI(self):
self.parent.title("App")
self.grid()
def main():
root = Tk()
app = App(root, 300, 250)
root.mainloop()
if __name__ == '__main__':
main()
第二种方法:您可以使用self.config(key=value)
或self["key"] = value
self.config(width=width, height=height)
或
self["width"] = width
self["height"] = height
请参阅:
from tkinter import *
class App(Frame):
def __init__(self, parent, width, height):
Frame.__init__(self, parent)
self.parent = parent
#self.config(width=width, height=height)
self["width"] = width
self["height"] = height
self.initUI()
def initUI(self):
self.parent.title("App")
self.grid()
def main():
root = Tk()
app = App(root, 300, 250)
root.mainloop()
if __name__ == '__main__':
main()
BTW:Frame.__init__
创建self.master
并将parent
分配给self.master
,以便您可以使用self.master
代替self.parent
BTW:你可以创建没有Frame
from tkinter import *
class App(Tk):
def __init__(self, width, height): # no need "parent"
Tk.__init__(self) # no need "parent"
self["width"] = width
self["height"] = height
# OR
#self.geometry("%dx%d" % (width, height))
#self.geometry("%dx%d+%d+%d" % (width, height, x, y))
self.initUI()
def initUI(self):
self.title("App") # no need "parent"
# no need self.grid()
def main():
App(300, 250).mainloop()
if __name__ == '__main__':
main()