Как запустить какое-то время l oop в окне tkinter, когда оно открыто? - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть while l oop, который я хочу запустить, пока открыто окно Tkinter, но окно Tkinter даже не открывается, когда работает while l oop.

Это проблема, так как мой while l oop бесконечный l oop.

Я в основном хочу создать программу, которая предоставляет пользователям новые варианты после выбора предыдущего варианта путем обновления кнопки через while l oop, но всякий раз, когда я использую while l oop, Tkinter не открывает окно, пока я не заканчиваю l oop.

root = Tk()
i=0
while i==0:
    def choice1():
        list1[a1].implement()
        list1.remove(list1[a1])
    def choice2():
        list2[a2].implement()
        list2.remove(list2[a2])

button1 = tk.Button(root, text=list1.headline, command=choice1)
button2 = tk.Button(root, text=list2.headline, command =choice2)
root.mainloop()

Также появляется ошибка, потому что tkinter продолжает выполнять это l oop до тех пор, пока в списке list1 или list2 не останется элементов.

Я хочу знать, есть ли способ запустить окно Tkinter, пока пока l oop продолжается

(a1 и a2 - случайно сгенерированные числа.)

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

mainloop() является основной причиной непрерывного отображения окна. Когда while loop работает, mainloop() не выполняется, пока не закончится while loop. И поскольку в вашем случае время l oop никогда не заканчивается, код, включающий mainloop(), продолжает ожидать выполнения своей очереди.

Чтобы преодолеть эту проблему, вам нужно будет разместить все нужные вам виджеты для отображения в окне вместе с mainloop() внутри while loop

Как это:

import tkinter as tk

root = tk.Tk()

i = 0

while i == 0:

    def choice1():
        list1[a1].implement()
        list1.remove(list1[a1])

    def choice2():
        list2[a2].implement()
        list2.remove(list2[a2])


    button1 = tk.Button(root, text=list1.headline, command=choice1)
    button2 = tk.Button(root, text=list2.headline, command=choice2)

    root.mainloop()
0 голосов
/ 03 апреля 2020

Вы, вероятно, должны поместить root.mainloop в l oop, иначе он никогда не будет выполнен. Если mainl oop () не выполняется, окно не останется открытым.

А также: вам нужно вызывать функции, определения их недостаточно. Таким образом, вместо того, чтобы в l oop были только def choice1() и def choice2(), вам также нужно иметь choice1() и choice2() в l oop, иначе он не будет выполнять эти команды.

И еще одна вещь: вам нужно упаковать () кнопки, поэтому добавьте строки button1.pack() и button2.pack(). Кнопки также должны быть перед l oop, что означает, что ваши def choice1() и def choice2() должны быть перед l oop. (Иначе кнопки никогда не появятся)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...