Почему при открытии нового окна всё происходит на основном окне?

Рейтинг: 1Ответов: 1Опубликовано: 03.04.2023

Столкнулся с проблемой, что когда открывается новое окно class(Tk.TopLevel), все надписи, кнопки и в прицепи всё что я добавляю, всё происходит на основном окне class Main(tk.TK).

Как это можно исправить?
Проверял множество других кодов в интернете, не могут понять почему так. И в принципе я новичок в python, если кто-то знает, можете пожалуйста на понятном языке для чайника, что означает в class'e *args, **kwargs.

Я почитал в интернете, но все равно не до конца понимаю. Когда смотрел видео, просто посоветовали оставить, но не сказали для чего, мой код вроде и без них работает.

import tkinter as tk
from tkinter import *
from PIL import Image


class ReSize:

    def __init__(self):

        self.image_path = "D:\Project PyCharm\Teste\gbg2.png"
        self.img = Image.open(self.image_path)
        self.new_image = self.img.resize((330, 250))
        self.new_image.show()
        self.new_image.save('D:\Project PyCharm\Teste\gbg2_size.png')


class Convert:

    def __init__(self):

        self.im = Image.open("D:\Project PyCharm\Teste\gbg.jpg")
        self.im.convert('RGB').save("gbg2.png", "png")



class Main(tk.Tk):

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

        self.title("Вход в приложение")
        self.geometry("330x250+630+200")
        self.resizable(False, False)

        self.image = PhotoImage(file="gbg2_size.png")
        self.bg = tk.Label(self, image=self.image)
        self.bg.place(relx=0, rely=0)

        self.btn = tk.Button(text="Вывести таблицу", width=30 ,command=Tabl, font=('times', 12)).place(relx=0.085, rely=0.2)
        self.btn = tk.Button(text="Выход", width=30, command=self.destroy, font=('times', 12)).place(relx=0.085, rely=0.4)


class Tabl(tk.Toplevel):

    def __init__(self, *args, **kwargs):
        tk.Toplevel.__init__(self, *args, *kwargs)

        self.title("Table")
        self.geometry("330x500+630+200")
        self.resizable(False, False)


        self.labbel_2 = tk.Label(text="| N рабочего |       ФИО        |  Зарплата  |")
        self.labbel_2.pack()


if __name__ == "__main__":
    app = Main()
    app.mainloop()

Ответы

▲ 2Принят

Укажите ссылку на родительский контейнер:

# -----------------------------> vvvv <--------------------------------- # !!! +++ 
        self.labbel_2 = tk.Label(self, text="| N рабочего |       ФИО        |  Зарплата  |")
 

import tkinter as tk
from tkinter import *
from PIL import Image


'''          # ???
class ReSize:
    def __init__(self):
        self.image_path = "D:\Project PyCharm\Teste\gbg2.png"
        self.img = Image.open(self.image_path)
        self.new_image = self.img.resize((330, 250))
        self.new_image.show()
        self.new_image.save('D:\Project PyCharm\Teste\gbg2_size.png')


class Convert:
    def __init__(self):
        self.im = Image.open("D:\Project PyCharm\Teste\gbg.jpg")
        self.im.convert('RGB').save("gbg2.png", "png")
''' 


class Tabl(tk.Toplevel):
    def __init__(self):
#        tk.Toplevel.__init__(self, *args, **kwargs)
        super().__init__()                            
        
        self.title("Table")
        self.geometry("330x500+630+200")
        self.resizable(False, False)

# -----------------------------> vvvv <--------------------------------- # !!! +++ 
        self.labbel_2 = tk.Label(self, text="| N рабочего |       ФИО        |  Зарплата  |")
        self.labbel_2.pack()


class Main(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        self.title("Вход в приложение")
        self.geometry("330x250+630+200")
        self.resizable(False, False)

        self.image = PhotoImage(file="Ok.png")           #(file="gbg2_size.png")
        self.bg = tk.Label(self, image=self.image)
        self.bg.place(relx=0, rely=0)

        self.btn = tk.Button(text="Вывести таблицу", width=30,
            command=Tabl, font=('times', 12)).place(relx=0.085, rely=0.2)
        self.btn = tk.Button(text="Выход", width=30, 
            command=self.destroy, font=('times', 12)).place(relx=0.085, rely=0.4)


if __name__ == "__main__":
    app = Main()
    app.mainloop()

**Что такое *args и kwargs в Python?

введите сюда описание изображения