Проблема с очисткой виджетов и добавлением новых в l oop в Python tkinter gui - PullRequest
0 голосов
/ 28 марта 2020

Так вот и все ...

from tkinter import *
from PIL import ImageTk,Image
import tkinter.font as f

root = Tk()
root.title("KBC")
root.configure(background="#8B008B")
root.geometry("1920x1080")
q="not started"
def start():
    head.place_forget()
    button.place_forget()
    global q
    q="started"

path="KK3O.jpg"
k = Image.open(path)
k = k.resize((1400, 800), Image.ANTIALIAS)
img = ImageTk.PhotoImage(k)
label = Label(root, image=img)
label.place(relwidth=1, relheight=1)


if q=="not started":
    #INTRODUCTION
    path = "K.png"
    k1 = Image.open(path)
    k1 = k1.resize((300,335), Image.ANTIALIAS)
    logo = ImageTk.PhotoImage(k1)
    head = Label(root, image=logo, borderwidth=10, relief="sunken")
    head.place(relx=0.5, rely=0.14, anchor='n')
    myfont = f.Font(family='Maiandra GD')
    button = Button(root, text="START", font=myfont, borderwidth=10, bg="#C5B358", command=start)
    button.place(relx=0.5, rely=0.68, relwidth=0.235, anchor='n')
else:
    #FRAME - 1A
    for i in range(1,6):
        label1 = Label(root, text="HEYYYYYYYYYYYYY",bg="red")
        label1.pack()
root.mainloop()

ГЛАВНАЯ ИЗОБРАЖЕНИЕ

ЭТО ПРОИСХОДИТ, КОГДА Я НАЖИМАЮ НАЧАТЬ

Это изображения домашней страницы, я надеялся, что виджет '' 'label1' '' скажет «HEYYYYYYYYYYYYY» 5 раз, как только я нажму кнопку пуска, хотя и кнопка, и изображение исчезнут но новый лейбл не появится. Как я могу найти проблему?

PS: Я все еще начинающий, и это мой третий проект в tkinter.

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Во-первых, когда вы используете переменные, которые не определены в функции (например, "head" и "button" в "start", вы хотите передать их в качестве аргументов или сделать их глобальными и использовать ключевое слово global как вы сделали с «q».

Теперь, вообще говоря, при обновлении виджета вы хотите обновить свой объект Tk, используя метод .update ().

0 голосов
/ 28 марта 2020

Поместите код из другого в вашу функцию, чтобы ваш код выглядел следующим образом:

from tkinter import *
from PIL import ImageTk,Image
import tkinter.font as f

root = Tk()
root.title("KBC")
root.configure(background="#8B008B")
root.geometry("1920x1080")
q="not started"
def start():
    head.place_forget()
    button.place_forget()
    global q
    q="started"
    for i in range(1,6):
        label1 = Label(root, text="HEYYYYYYYYYYYYY",bg="red")
        label1.pack()

path="KK3O.jpg"
k = Image.open(path)
k = k.resize((1400, 800), Image.ANTIALIAS)
img = ImageTk.PhotoImage(k)
label = Label(root, image=img)
label.place(relwidth=1, relheight=1)


if q=="not started":
    #INTRODUCTION
    path = "KK3O.jpg"
    k1 = Image.open(path)
    k1 = k1.resize((300,335), Image.ANTIALIAS)
    logo = ImageTk.PhotoImage(k1)
    head = Label(root, image=logo, borderwidth=10, relief="sunken")
    head.place(relx=0.5, rely=0.14, anchor='n')
    myfont = f.Font(family='Maiandra GD')
    button = Button(root, text="START", font=myfont, borderwidth=10, bg="#C5B358", command=start)
    button.place(relx=0.5, rely=0.68, relwidth=0.235, anchor='n')

root.mainloop()
...