Я уже давно использую Python, и я сделал несколько приложений с графическим интерфейсом. Когда я писал свое новое приложение, я наткнулся на какое-то поведение tkinter, которое, я думаю, просто странно.Python tkinter: кнопка исчезает после обновления метки
Рассмотрим следующий код:
from tkinter import *
root = Tk()
root.geometry('200x200')
label = Label(root, bg='green', text='0', font=('arial', 40, 'bold'))
label.place(x=0, y=0, width=200, height=200)
def add():
label['text'] = int(label['text']) + 1
if label['text'] == 10:
button.place_forget()
button = Button(root, command=add, text='+1', font=('arial', 20, 'bold'))
button.place(x=50, y=50, width=100, height=100)
root.mainloop()
Как и следовало ожидать, при запуске этого кода вы получите небольшое окно с зеленым фоном и кнопки. После нажатия кнопки 10 раз оно исчезает, а в окне отображается «10».
Проблема, с которой я столкнулся, возникает, когда я использую другой родительский виджет для виджета кнопки. Например, когда я изменить эту строку
button = Button(root, command=add, text='+1', font=('arial', 20, 'bold'))
в
button = Button(label, command=add, text='+1', font=('arial', 20, 'bold'))
замена «корень» с «ярлыком», мой графический интерфейс просто глюки из. Каждый раз, когда я нажимаю кнопку, она исчезает. Иногда он появляется через несколько секунд, но иногда он появляется снова, когда я пытаюсь щелкнуть по нему.
После некоторого тестирования я обнаружил, что кнопка исчезает при каждом обновлении родительской метки.
Мне было интересно; Почему это происходит? И есть ли способ исправить проблему, не используя «root» в качестве родителя для кнопки (это сделало бы мое приложение намного сложнее или, по крайней мере, заставило бы меня перестроить много вещей gui)
I пытался найти информацию об этой проблеме, но я не мог найти ее.
Обычно родительский вид виджетов является либо (потомками) 'Toplevels', либо' Frames'. Мой вопрос: почему логически вы хотите сделать ярлык родителем кнопки? – nbro
На какой платформе вы работаете? –
Я использую Windows 8.1 64 бит. – kolokkol