Mein Tkinter-Fenster wird die meiste Zeit korrekt angezeigt, aber manchmal wird es nicht angezeigt. Es ist ein großer Schmerz. Ich habe verschiedene Dinge ausprobiert (zB das Auslassen eines beliebigen Pygame-Renderings während der Tkinter-Fensterkonstruktion) und ich habe bestätigt, dass die Fensterkoordinaten genau gleich sind, wenn sie angezeigt werden oder nicht angezeigt werden. Ich habe versucht, lift
das Fenster, ich habe versucht, force_focus
auf dem Fenster, aber nichts funktioniert.Warum wird mein Tkinter-Fenster manchmal überhaupt nicht angezeigt?
Hier ist mein Code:
# Function to take a postcode and station using Tkinter:
def first_time_setup():
global test_w, test_r, default_colour
master = Tk()
master.withdraw()
master.overrideredirect(1)
back_img = PhotoImage(file=find_data_file('Outlooker_background.png'))
back_label = Label(master, image=back_img)
back_label.place(x=0, y=0, relwidth=1, relheight=1)
back_label.image = back_img
text_font = font.Font(family='Arial', size=12)
button_font = font.Font(family='Calibri Light', size=11, weight="bold")
master.columnconfigure(0, weight=3)
e_weather = Entry(master, font=text_font, width=15)
e_weather.grid(row=0, column=1, padx=5, pady=(15, 5), sticky=E)
b_weather = Button(master, text="TEST", font=button_font,
bg='light blue', command=lambda: test_weather(e_weather.get(), b_weather, b_done))
b_weather.grid(row=0, column=2, padx=(0, 15), pady=(12, 0), sticky=E)
e_rail = Entry(master, font=text_font, width=15)
e_rail.grid(row=1, column=1, padx=5, pady=5, sticky=E)
b_rail = Button(master, text="TEST", font=button_font,
bg='light blue', command=lambda: test_rail(e_rail.get(), b_rail, b_done))
b_rail.grid(row=1, column=2, padx=(0, 15), sticky=E)
b_done = Button(master, text="DONE", font=button_font, state=DISABLED,
bg='light blue', command=lambda: testing_done(master))
b_done.grid(row=2, column=2, padx=(0, 15), pady=10, sticky=E)
if first_time:
b_quit = Button(master, text="QUIT", font=button_font,
bg='light blue', command=lambda: sys.exit(0))
else:
b_quit = Button(master, text="EXIT", font=button_font,
bg='light blue', command=lambda: master.destroy())
pygame.draw.rect(screen, black, (223, 296, 417, 134))
pygame.display.flip()
b_quit.grid(row=2, padx=15, pady=10, sticky=W)
default_colour = b_quit.cget("background")
master.update_idletasks() # Update "requested size" from geometry manager
x = (master.winfo_screenwidth() - 417)/2
y = (master.winfo_screenheight() - 134)/2
master.geometry("417x134+%d+%d" % (x, y))
master.deiconify()
master.lift()
master.focus_force()
e_weather.focus_set()
master.mainloop()
Da das Fenster etwa die Hälfte der Zeit anzeigt, halte ich meinen Code in Ordnung zu sein, und dies ist möglicherweise ein Fehler entweder mit Tkinter oder sogar Windows? Weiß jemand, was passiert, bitte?
EDIT: Hier ist der Aufruf first_time_setup
:
if first_time:
first_time_setup()
first_time = False
So alle weiteren Anrufe werden die else
Anweisung innerhalb der Funktion auslösen.
Wie nennt man 'first_time_setup'? – SneakyTurtle
@SneakyTurtle: Ich habe die Frage bearbeitet, um den Anruf anzuzeigen. – JasonPy