Как создать несколько кадров в Tkinter, используя OOP? - PullRequest
0 голосов
/ 01 августа 2020

Итак, я изучал класс и методы и пытался создать несколько фреймов, используя метод 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 Ответ

2 голосов
/ 01 августа 2020

Самый простой способ указать аргументы фрейма при использовании класса - передать аргументы ключевого слова в фрейм. Это легко сделать, добавив **kwargs в конец аргументов в 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, **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 в объявлении. Пример: Frame(window, bg="white", **kwargs)

Edit: * args, ** kwargs: * args в основном распаковывается в формате списка. * args принимает как можно больше значений. если вы напечатаете args, он выведет список.

** kwargs в основном распаковывает значение словаря. ** kwargs принимает пары ключ-значение. если вы напечатаете kwargs, он выведет словарь.

...