Я хочу сделать GUI, но я получаю эту ошибку: self.frame.grid (row = 0, column = 0, sticky = "nsew") AttributeError: у объекта 'function' нет атрибута 'grid' - PullRequest
0 голосов
/ 06 января 2020

Извините за разметку этого вопроса, я впервые работаю с сообщениями stackoverflow. Я хочу сделать GUI для Ti c Ta c Toe (меню игры). И у меня есть возможность помещать кнопки куда угодно в GUI, поэтому я использовал сетку.

import tkinter as tk

LARGE_FONT= ("Verdana", 12)

class SeaofBTCapp(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        container = tk.Frame(self)

        container.pack(side="top", fill="both", expand=True)

        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}

        for F in (MainWindow, Game, Difficulty):
            frame = F(container, self)

            self.frames[F] = frame

            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(StartPage)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()


class MainWindow(tk.Tk):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="Welcom to TIC TAC TOE", font=LARGE_FONT)
        label.pack(pady=10, padx=10)

        button1 = tk.Button(self, text="Start",
                            command=lambda: controller.show_frame(Game))
        button1.pack()

        button2 = tk.Button(self, text="Diffeculty",
                            command=lambda: controller.show_frame(Difficulty))
        button2.pack()

        button3 = tk.Button(self, text="Quit", command=self.Quit)
        button3.pack()

        label1 = tk.Label(self, text="Made by VindictaOG")
        label1.pack()

    def Quit(self):
            exit()


class Game(tk.Tk):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        button1 = tk.Button(self, text="New Game")
        button1.pack()

        button2= tk.Button(self, text="Back to homescreen",
                           command=lambda: controller.show_frame(MainWindow))
        button2.pack()


class Difficulty(tk.Tk):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        button1 = tk.Button(self, text="1V1", command=lambda: controller.show_frame(MainWindow))
        button1.pack()

        button2 = tk.Button(self, text="Back to homescreen",
                            command=lambda: controller.show_frame(Game))
        button2.pack()

gui = SeaofBTCapp() 
gui.mainloop()

Но когда я использую сетку, я получаю эту ошибку:

Traceback (most recent call last):
  File "/home/ivar/PycharmProjects/J1B2Afvink6/BKE.py", line 82, in <module>
    gui = SeaofBTCapp()
  File "/home/ivar/PycharmProjects/J1B2Afvink6/BKE.py", line 27, in __init__
    frame.grid(row=0, column=0, sticky="nsew")
TypeError: wm_grid() got an unexpected keyword argument 'row'

I пробовал с пакетом, но это не сработало, кто-нибудь знает, как это исправить?

1 Ответ

0 голосов
/ 08 января 2020

Должен наследоваться от tk.Frame вместо tk.Tk для MainWindow, Game и Трудности. Также StartPage не определяется. @ acw1668

Использование (tk.Frame, tk.Tk) вместо просто (tk.Tk) решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...