Подтвердить что ты не робот

Использование Tkinter в python для редактирования заголовка

Я пытаюсь добавить пользовательский заголовок в окно, но у меня возникают проблемы с ним. Я знаю, что мой код не прав, но когда я его запускаю, он создает вместо него 2 окна, один с заголовком tk и еще большее окно с "Simple Prog". Как сделать так, чтобы окно tk имело заголовок "Простой прог" вместо нового дополнительного окна. Я не думаю, что у меня есть часть Tk(), потому что, когда у меня есть это в моем полном коде, есть ошибка

from tkinter import Tk, Button, Frame, Entry, END

class ABC(Frame):
    def __init__(self,parent=None):
        Frame.__init__(self,parent)
        self.parent = parent
        self.pack()
        ABC.make_widgets(self)

    def make_widgets(self):
        self.root = Tk()
        self.root.title("Simple Prog")
4b9b3361

Ответ 1

Если вы не создаете корневое окно, Tkinter создаст его для вас, когда вы попытаетесь создать любой другой виджет. Таким образом, в вашем __init__, поскольку вы еще не создали корневое окно при инициализации фрейма, Tkinter создаст его для вас. Затем вы вызываете make_widgets, который создает второе корневое окно. Вот почему вы видите два окна.

Хорошо написанная программа Tkinter всегда должна явно создавать корневое окно перед созданием любых других виджетов.

При изменении кода для явного создания корневого окна вы получите одно окно с ожидаемым заголовком.

Пример:

from tkinter import Tk, Button, Frame, Entry, END

class ABC(Frame):
    def __init__(self,parent=None):
        Frame.__init__(self,parent)
        self.parent = parent
        self.pack()
        self.make_widgets()

    def make_widgets(self):
        # don't assume that self.parent is a root window.
        # instead, call `winfo_toplevel to get the root window
        self.winfo_toplevel().title("Simple Prog")

        # this adds something to the frame, otherwise the default
        # size of the window will be very small
        label = Entry(self)
        label.pack(side="top", fill="x")

root = Tk()
abc = ABC(root)
root.mainloop()

Также обратите внимание на использование self.make_widgets(), а не ABC.make_widgets(self). Хотя оба в конечном итоге делают то же самое, первый - это правильный способ вызова функции.

Ответ 2

Я не уверен, что я прав, но это то, что вы хотите?

    root = tkinter.Tk()
    root.title('My Title')

Корень - это окно, которое вы создаете, а остальное довольно понятно.

Ответ 3

Попробуйте что-то вроде:

from tkinter import Tk, Button, Frame, Entry, END

class ABC(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()        

root = Tk()
app = ABC(master=root)
app.master.title("Simple Prog")
app.mainloop()
root.destroy()

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

Ответ 4

Сделав это, вы можете сделать это следующим образом:

from tkinter import Tk, Button, Frame, Entry, END

class ABC(Frame):
    def __init__(self, parent=None):
        Frame.__init__(self, parent)
        self.parent = parent
        self.pack()
        ABC.make_widgets(self)

    def make_widgets(self):
        self.parent.title("Simple Prog")

Вы увидите изменение названия, и вы не получите два окна. Я оставил свой parent как master, как в справочном материале Tkinter в документации библиотеки python.

Ответ 5

Для всех, кто сталкивается с проблемой открытия двух окон, и пробегает этот вопрос. Вот как я наткнулся на решение.

Причина, по которой код в этом вопросе создает два окна, состоит в том, что

Frame.__init__(self, parent)

выполняется до

self.root = Tk()

Простым решением является запуск Tk() перед запуском Frame.__ init _()

self.root = Tk()
Frame.__init__(self, parent)

Почему это так, я не совсем уверен.

Ответ 6

self.parent - ссылка на фактическое окно, поэтому self.root.title должен быть self.parent.title, а self.root не должен существовать.

Ответ 7

widget.winfo_toplevel().title("My_Title")

изменяет заголовок экземпляра Tk или Toplevel, дочерний элемент которого widget.

Ответ 8

Вот пример:

from tkinter import *;
screen = Tk();
screen.geometry("370x420"); //size of screen

Изменить название окна

  screen.title('Your Name')

Запустите его:

screen.mainloop();