Как сделать так, чтобы метка циклически изменяла заданные слова или фразы при нажатии кнопки в tkinter - PullRequest
0 голосов
/ 28 февраля 2020

Так что я пытаюсь заставить его циклически проходить каждую букву алфавита при нажатии кнопки.
Я попробовал метод, который я сейчас показываю.
Я также попробовал многие другие, и я не смог ' что-нибудь сработает.
Если у вас есть решение, пожалуйста, постарайтесь не усложнять, я тоже новичок в этом.

from tkinter import *
win = Tk()
win.title('ab')
a = 0
def changetext():
    a = a+1
    if a == 1:
        lbl.config(text='b')
def changetext():
    if a == 2:
        lbl.config(text='c')

lbl = Label(win,text='a')
lbl.grid(row=1,column=1)
btn = Button(win,text='u', command =changetext)
btn.grid(row=2,column=1)
win.mainloop()```

Ответы [ 3 ]

0 голосов
/ 28 февраля 2020

Вы можете использовать itertools.cycle для создания списка циклов, а затем использовать функцию next() для получения следующего элемента в списке циклов:

import tkinter as tk
from itertools import cycle

words = cycle(['hello', 'world', 'python', 'is', 'awesome'])

root = tk.Tk()

lbl = tk.Label(root, text=next(words), width=20)
lbl.pack()

tk.Button(root, text='Next', command=lambda: lbl.config(text=next(words))).pack()

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

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

from tkinter import *
win = Tk()
win.title('ab')
i = 0
def changetext():
    global i
    i = i + 1
    if i == 1:
        lbl.config(text='word 2')
    if i == 2:
        lbl.config(text='word 1 ')



lbl = Label(win,text='a')
lbl.grid(row=1,column=1)
btn = Button(win,text='u', command =changetext)
btn.grid(row=2,column=1)
win.mainloop()
0 голосов
/ 28 февраля 2020

В python переменные внутри функций являются локальными, что означает, что если вы определяете переменную a = 0 вне функции, а затем делаете a = 1 в функции, a равно 1 внутри функции, но все равно равно 0 снаружи. Если вы хотите изменить значение a вне функции изнутри функции, вам нужно объявить a как глобальную переменную (см. Код ниже).

import tkinter as tk  # avoid import * to because it leads to naming conflicts
win = tk.Tk()
win.title('ab')

i = 0
letters = "abcdefghijklmnopqrstuvwxyz"

def changetext():
    global i  # change value of i outside function as well
    i += 1
    i %= 26  # cycle through the alphabet
    lbl.configure(text=letters[i])

lbl = tk.Label(win, text='a')
lbl.grid(row=1, column=1)
btn = tk.Button(win,text='u', command=changetext)
btn.grid(row=2, column=1)
win.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...