Обновление переменной с помощью кнопки tkinter - PullRequest
0 голосов
/ 12 октября 2019

Я пытался написать программу, которая проверяет навыки письма. (используя tkinter)

Для использования типа в y, нажмите ввод, напишите предложение, которое вам дали, нажмите ввод еще раз, и он выведет время, которое потребовалось вам. Это та часть, которая работает.

Чтобы добавить больше гибкости, я хотел добавить кнопку, которая перемешивает предложение и дает вам новое. Я попытался random.choice из списка, определяя переменную как параметр, и в настоящее время застрял на random.randint. Никто из них не работал до сих пор. После запуска кода они выводят случайное предложение, но кнопка просто ничего не делает.

- здесь код функции и далее, где используется кнопка. Если вам нужен полный код, просто спроситедля этого: D

def change_sentence():
    var = random.randint(0,5)
    if var == 1:
        sentence_var = "thats gonna work"
        return sentence_var

    if var == 2:
        sentence_var = "probably"
        return sentence_var

    if var == 3:
        sentence_var = "i guess"
        return sentence_var

    if var == 4:
        sentence_var = "maybe?"
        return sentence_var

    if var == 5:
        sentence_var = "please??"
        return sentence_var 

sentence_var = change_sentence()



shuffle_button = Button(root, text="Shuffle", command=change_sentence)

В заключение я просто ищу способ заставить мою кнопку работать.

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Когда ваша функция обратного вызова возвращает переменную, на самом деле ничего не происходит. В частности, он не будет обновлять текст в вашем графическом интерфейсе.

Вы должны изучить StringVar и использовать параметр textvariable для вашего текстового объекта. Вот маленький пример. Я также убрал ваше утверждение if:

root = tk.Tk()

class tkApp:
    def __init__(self, master):
        self.sentence_var = tk.StringVar()
        self.change_sentence()
        sentence_text = tk.Label(master, textvariable=self.sentence_var)
        shuffle_button = tk.Button(master, text="Shuffle", command=self.change_sentence)
        sentence_text.pack()
        shuffle_button.pack()

    def change_sentence(self):
        var = np.random.randint(1, 6)
        if var == 1:
            self.sentence_var.set("thats gonna work")
        elif var == 2:
            self.sentence_var.set("probably")
        elif var == 3:
            self.sentence_var.set("i guess")
        elif var == 4:
            self.sentence_var.set("maybe?")
        elif var == 5:
            self.sentence_var.set("please??")

myApp = tkApp(root)
root.mainloop()
0 голосов
/ 12 октября 2019

Вам нужно поместить оператор print в функцию, если вы просто хотите напечатать предложение. При вызове функции вашей переменной termince_var будет присвоена строка, но после этого кнопка не будет влиять на нее, поскольку она не находится внутри функции.

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