Tkinter in Python gebruiken om de titelbalk

Ik probeer een aangepaste titel aan een raam toe te voegen, maar ik heb het probleem mee. Ik weet dat mijn code niet gelijk is, maar wanneer ik het ren, creëert het in plaats daarvan 2 Windows, één met alleen de titel TK en een ander groter venster met “Simple Prog”. Hoe maak ik het, zodat het TK-venster de titel “Simple PROG” heeft in plaats van een nieuw extra venster te hebben. Ik denk niet dat ik het TK () deel moet hebben, want als ik dat in mijn volledige code heb, er is een foutmelding

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")

1, Autoriteit 100%

Als u geen rootvenster maakt, maakt TKINER één voor u wanneer u probeert een andere widget te maken. Dus, in uw __init__, omdat u nog geen rootvenster hebt gemaakt wanneer u het frame initialiseert, zal TKINER één voor u maken. Vervolgens belt u make_widgetsdie een tweede -waaiervenster maakt. Daarom zie je twee ramen.

Een goed geschreven TKIER-programma moet altijd expliciet een root-venster maken voordat u andere widgets maakt.

Wanneer u uw code aanwijst om het root-venster uitdrukkelijk te maken, eindigt u met één venster met de verwachte titel.

Voorbeeld:

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()

Let ook op het gebruik van self.make_widgets()in plaats van ABC.make_widgets(self). Hoewel beide uiteindelijk hetzelfde doen, is de eerste de juiste manier om de functie aan te roepen.


Antwoord 2, autoriteit 75%

Hier is het lekker simpel.

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

rootis het venster dat u maakt en root.title()stelt de titel van dat venster in.


Antwoord 3, autoriteit 17%

Probeer zoiets als:

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()

Nu zou je een frame met een titel moeten hebben, daarna kun je vensters toevoegen voor
verschillende widgets als je wilt.


Antwoord 4, autoriteit 4%

Voorbeeld van python GUI


Hier is een voorbeeld:

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

De naam van het venster wijzigen

 screen.title('Title Name')

Voer het uit:

screen.mainloop();

Antwoord 5, autoriteit 2%

Ik heb ontdekt dat dit werkt:

window = Tk()
window.title('Window')

Misschien helpt dit?


Antwoord 6, autoriteit 2%

Een punt dat benadrukt moet worden is:
De .title()-methode moet voor de .mainloop() gaan

Voorbeeld:


from tkinter import *
# Instantiating/Creating the object
main_menu = Tk()
# Set title
main_menu.title("Hello World")
# Infinite loop
main_menu.mainloop()

Anders kan deze fout optreden:

File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/__init__.py", line 2217, in wm_title
    return self.tk.call('wm', 'title', self._w, string)
_tkinter.TclError: can't invoke "wm" command: application has been destroyed

En de titel verschijnt niet in het bovenste frame.


Antwoord 7

Als je dit net zelf hebt gedaan, kun je het op deze manier doen:

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")

U ziet de titelverandering en u krijgt geen twee vensters. Ik heb mijn parentals masterzoals in de Tkinter-referentie-dingen in de documentatie van de Python-bibliotheek.


8

Voor iedereen die stroomt in de kwestie van het openen van twee vensters en deze vraag uitloopt. Hier is hoe ik op een oplossing struikelde.

De reden waarom de code in deze vraag twee vensters produceert, is omdat

Frame.__init__(self, parent)

wordt eerder uitgevoerd

self.root = Tk()

De Simple Fix is ​​om TK () te draaien voordat het frame wordt uitgevoerd .__ init _ ()

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

Waarom dat is het geval, ik ben niet helemaal zeker.


9

Eenvoudige methode:

root = Tk()
root.title('Hello World')

10

Zelf.parent is een verwijzing naar het eigenlijke venster, dus zelf .HOOT.Titel zou zelf.parent.title en zelf moeten bestaan.


11

Ik heb een oplossing gevonden die u zou moeten helpen:

from tkinter import Tk, Button, Frame, Entry, END
class ABC(Frame):
    def __init__(self,master=None):
        super().__init__(master)
        self.pack()
        self.master.title("Simple Prog")
        self.make_widgets()
    def make_widgets(self):
        pass
root = Tk()
app = ABC(master=root)
app.mainloop()

Gevonden op: docs.python.org

Other episodes