通过继承自Tkinter的类传递参数

时间:2016-01-26 00:44:24

标签: python python-2.7 tkinter

我正在学习如何使用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()

1 个答案:

答案 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()