提问者:小点点

如何使用OOP在Tkinter中制作多个帧?


因此,我学习了类和方法,并试图通过在一个类中使用init方法来制作多个框架。 下面是我做的事情:

    from tkinter import *
    import random
    from PIL import ImageTk, Image
    
    win = Tk()
    win.attributes('-fullscreen', True)
    # Define Frame Class
    
    class MyFrame:
        def __init__(self, master):
            frame = Frame(master, width = win.winfo_screenwidth(),
                    height = win.winfo_screenheight(),
                    bg='black')
            frame.pack()
    
    def FrameOne():
        frameone = MyFrame(win)
    
    
    def FrameTwo():
        frametwo = MyFrame(win)

    #Call Frame (This is where I want the following frames to have different unique attributes)
    
    FrameOne()
    FrameTwo()
    
    win.mainloop()

我的问题是我如何设置不同的框架背景,边框和其他框架属性,使每个框架都有独特的属性。


共1个答案

匿名用户

在使用类时指定框架参数的最简单方法是将关键字args传递给框架。 通过在init中的参数末尾添加**kwargs,可以非常容易地实现这一点。 然后,您可以像在声明一个框架时通常所做的那样,遍历所有的参数。

代码如下所示:

from tkinter import *
import random
from PIL import ImageTk, Image

win = Tk()
win.attributes('-fullscreen', True)
# Define Frame Class

class MyFrame:
    def __init__(self, master, **kwargs):
        frame = Frame(master, **kwargs)
        frame.pack()

def FrameOne():
    frameone = MyFrame(win, width = win.winfo_screenwidth(),
                       height = win.winfo_screenheight()//2,
                       bg='black')


def FrameTwo():
    frametwo = MyFrame(win, width=win.winfo_screenwidth(),
                       height = win.winfo_screenheight()//2,
                       bg='blue')

#Call Frame (This is where I want the following frames to have different unique attributes)

FrameOne()
FrameTwo()

win.mainloop()

注意:如果要指定应用于所有框架的默认参数,请将它们添加到声明中的,**kwargs之前。 例如:框架(窗口,bg=“white”,**kwargs)