Кнопка Tkinter недоступна после первого использования - PullRequest
0 голосов
/ 31 марта 2020

Извините за вопрос, новичок в PY. Я пытаюсь создать генератор случайных чисел, который будет выбирать из списка и печатать результат. Мне удалось это сделать с помощью следующего кода

import random

exercises = ['Bodyweight Squat 4x8','Step Back Lunge 4x8', 'Push Ups 4x10',
            '2 Min Kettle Bell Swing', 'Kettle Bell Sit-ups 4x5', '1 Min Plank',
            'Pistol Squat 4x10', '1 Min Flutter Kicks', 'Crunches 4x10', 'Dips 4x5',
            'Goblet Squat 4x5', 'Turkish Get-Up 4x5', 'Kettle Bell Press 5x10',
            'Kettle Bell Clean 4x10']
while True:
    x=random.choice(exercises)
    input("<Press Enter>")
    print(x)
from tkinter import *
from random import randint

root = Tk()
root.title('Random Workout Generator')
root.geometry('400x300')
topFrame= Frame(root)
topFrame.pack()
bottomFrame= Frame(root)
bottomFrame.pack(side=BOTTOM)
label2=Label(root,text='Click the button, fatty',font=('arial',10))
label2.pack(side=TOP,pady=10)
#window size and title

def click():

# 14 exercises
        exercises = ['Bodyweight Squat 4x8','Step Back Lunge 4x8', 'Push Ups 4x10',
            '2 Min Kettle Bell Swing', 'Kettle Bell Sit-ups 4x5', '1 Min Plank',
            'Pistol Squat 4x10', '1 Min Flutter Kicks', 'Crunches 4x10', 'Dips 4x5',
            'Goblet Squat 4x5', 'Turkish Get-Up 4x5', 'Kettle Bell Press 5x10',
            'Kettle Bell Clean 4x10']
    #convert to set
        exercises_set= set(exercises)
    #convert back to list
        unique_exercises= list(exercises_set)
    #create list size variable
        total_number = len(unique_exercises) - 1
    #random number between 0 & 14
        rando = randint(0, total_number)

        winnerLabel = Label(root, text=unique_exercises[rando], font=('arial', 20,"bold"))
        winnerLabel.pack(pady=50)

Button1 = Button(topFrame, text= 'Generate', fg='purple',font=('helvetica', 15),command= click)
Button1.pack(side=BOTTOM,pady=20)


root.mainloop()

, однако после первого нажатия на кнопку он становится непригодным для использования. Кто-нибудь может указать мне правильное направление?

Ответы [ 2 ]

1 голос
/ 31 марта 2020

После первого щелчка он является все еще используемым, текст равен показывает, что он просто скрыт (попробуйте развернуть окно до максимума).

Один из способов исправить это заключается в создании метки вне функции click(), а в click() просто редактируйте текст метки с помощью .config(). Таким образом, каждый раз редактируется только одна метка.

Попробуйте:

from tkinter import *
from random import randint

root = Tk()
root.title('Random Workout Generator')
root.geometry('400x300')
topFrame= Frame(root)
topFrame.pack()
bottomFrame= Frame(root)
bottomFrame.pack(side=BOTTOM)
label2=Label(root,text='Click the button, fatty',font=('arial',10))
label2.pack(side=TOP,pady=10)
#window size and title

def click():

# 14 exercises
        exercises = ['Bodyweight Squat 4x8','Step Back Lunge 4x8', 'Push Ups 4x10',
            '2 Min Kettle Bell Swing', 'Kettle Bell Sit-ups 4x5', '1 Min Plank',
            'Pistol Squat 4x10', '1 Min Flutter Kicks', 'Crunches 4x10', 'Dips 4x5',
            'Goblet Squat 4x5', 'Turkish Get-Up 4x5', 'Kettle Bell Press 5x10',
            'Kettle Bell Clean 4x10']
    #convert to set
        exercises_set= set(exercises)
    #convert back to list
        unique_exercises= list(exercises_set)
    #create list size variable
        total_number = len(unique_exercises) - 1
    #random number between 0 & 14
        rando = randint(0, total_number)

        winnerLabel.config(text=unique_exercises[rando])

winnerLabel = Label(root, font=('arial', 20,"bold"))
winnerLabel.pack(pady=50)


Button1 = Button(topFrame, text= 'Generate', fg='purple',font=('helvetica', 15),command= click)
Button1.pack(side=BOTTOM,pady=20)


root.mainloop()
0 голосов
/ 31 марта 2020

Используйте следующий код, где я только что заменил этот менеджер пакетов следующим выражением -

winnerLabel.place(x= 0, y = 150, height = 100, width = 400)

Проблема была с менеджером пакетов. Я рекомендую использовать менеджер мест. Замените упаковку winnerLabel в функции указанным выше кодом размещения.


Вот полный код -

from tkinter import *
from random import randint

root = Tk()
root.title('Random Workout Generator')
root.geometry('400x300')
topFrame= Frame(root)
topFrame.pack()
bottomFrame= Frame(root)
bottomFrame.pack(side=BOTTOM)
label2=Label(root,text='Click the button, fatty',font=('arial',10))
label2.pack(side=TOP,pady=10)
count = [0,0]
#window size and title

def click():
# 14 exercises
        exercises = ['Bodyweight Squat 4x8','Step Back Lunge 4x8', 'Push       Ups 4x10','2 Min Kettle Bell Swing', 'Kettle Bell Sit-ups 4x5', '1 Min Plank',
        'Pistol Squat 4x10', '1 Min Flutter Kicks', 'Crunches 4x10', 'Dips 4x5',
        'Goblet Squat 4x5', 'Turkish Get-Up 4x5', 'Kettle Bell Press 5x10',
        'Kettle Bell Clean 4x10']
#convert to set
    exercises_set= set(exercises)
#convert back to list
    unique_exercises= list(exercises_set)
#create list size variable
    total_number = len(unique_exercises) - 1
#random number between 0 & 14
    rando = randint(0, total_number)



    winnerLabel = Label(root, text=unique_exercises[rando], font=('arial', 20,"bold"))
    winnerLabel.place(x= 0, y = 150, height = 100, width = 400)
    count.append(1)

Button1 = Button (topFrame, text = 'Generate' , fg = 'purple', font = ('helvetica', 15), command = click) Button1.pack (side = BOTTOM, pady = 20)

root .mainl oop ()

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