Не понимаю, почему есть дополнительное окно - PullRequest
0 голосов
/ 24 февраля 2019

Итак, у меня есть две вещи tkinter, одна из которых использует class, а другая без класса.Все должно работать одинаково, но когда я использую «классы», это создает два окна: одно, которое я фактически создал, и то, которое я не знаю, откуда оно появилось (вероятно, потому что я использую и Frame, иtk.Tk, но это не работает без классов).

import tkinter as tk


window = tk.Tk()
framer = tk.Frame(window)
window.title("Test")
window.geometry("720x480+360+240")
window.mainloop()

Выше приведен класс без классов.Ниже приводится класс с классами.

try:
        import tkinter as tk
except ImportError: #2.x
        import Tkinter as tk


class typtolator(tk.Tk):
        def __init__(self, *args, **kwargs):
                tk.Tk.__init__(self, *args, **kwargs)
                window = tk.Tk()
                framer = tk.Frame(window)
                window.title("Typtolator")
                window.geometry("720x480+360+240")



app = typtolator()
app.mainloop()

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Как отмечает @Bryan Oakley в своем ответе, проблема в том, что ваш класс равен a tk.Tk, поскольку он является производным от одного, поэтому дополнительное окно создается потому, что оно создает второй экземпляр простого tk.Tk в его __init__() методе.

То, что он пропустил, было примером правильного выполнения - что, я думаю, может быть важно, - так показано ниже:

try:
    import tkinter as tk
except ImportError: #2.x
    import Tkinter as tk


class Typtolator(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)  # Call superclass' __init__().
        framer = tk.Frame(self)
        self.title("Typtolator")
        self.geometry("720x480+360+240")


app = Typtolator()
app.mainloop()
0 голосов
/ 24 февраля 2019

Вы получаете два окна, потому что вы создаете два окна.

Первое окно - app, экземпляр typtolator.Этот класс является подклассом tk.Tk и, следовательно, является tk.Tk.'

Второе окно window, которое является экземпляром tk.Tk, который вы создаете при создании app.

Решение заключается в том или ином: подкласс tk.Tk, или не создавайте подкласс, а затем явно создайте экземпляр tk.Tk.

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