Виджет во втором кадре в основном классе не появляется - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь добавить второй фрейм в свой основной класс и добавить туда несколько виджетов. Я создал фрейм с помощью метода и назначил один из виджетов этому фрейму, но проблема в том, что он не отображается.

Я предоставил фрагмент кода с конфигурацией окна и 2x метками, которые находятся в основном фрейме(Оба отображаются правильно) и по одному в новом фрейме у которого появилась проблема.

Если у вас есть идеи, пожалуйста, помогите мне :)

import tkinter as tk

class MainApplication(tk.Tk):

    def __init__(self):
        super().__init__()

        # Adding a background picture
        self.background_img = tk.PhotoImage(file="in office.png")
        back_ground_img_label = tk.Label(self, image=self.background_img)
        back_ground_img_label.pack(fill="both", expand=True)

        # Adjusting the window
        width_of_window = 1012
        height_of_window = 604
        screen_width = self.winfo_screenwidth()
        screen_height = self.winfo_screenheight()
        x_coordinate = int((screen_width / 2) - (width_of_window / 2))
        y_coordinate = int((screen_height / 2) - (height_of_window / 2) - 30)
        self.geometry(
            f"{width_of_window}x{height_of_window}+{x_coordinate}+{y_coordinate}"
        )

        self.bet_frame()

        bet_value_label_bg = tk.Label(self)
        bet_value_label_bg.place(x=462, y=300)
        coin_button_1 = tk.Button(self.frame)
        coin_button_1.place(x=233, y=435)

    def bet_frame(self):
        self.frame = tk.Frame(width=1012, height=604)
        self.frame.pack()


if __name__ == "__main__":
    MainApplication().mainloop()

1 Ответ

1 голос
/ 09 ноября 2019

Единственное, что вы помещаете в self.frame, это coin_button_1, но когда вы помещаете его в (233, 435), он скрыт под основным окном self.

Лично я бы не использовал place, нолучше либо упаковать, либо даже лучше, чтобы сетка размещала виджеты на экране (см. Настройка ширины и высоты кадра )

Так что если вы измените def bet_frame(self) следующим образом, будет видно

...
        bet_value_label_bg = tk.Label(self, text='value')
        bet_value_label_bg.place(x=462, y=300)

    def bet_frame(self):
        self.frame = tk.Frame(master=self, width=1012, height=604)
        self.frame.pack()
        coin_button_1 = tk.Button(self.frame, text='coin button')
        coin_button_1.pack()
...

Обратите внимание, что bet_value_label_bg отображается в середине изображения, и вам, возможно, придется расширить главное окно, чтобы сделать видимым self.frame, в зависимости от размера изображения.

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