首页 > 解决方案 > 有没有办法使用按钮(Tkinter)同时调用一个元组索引?

问题描述

我正在使用一些 Youtube 视频学习 Python,并在 StackOverflow 中阅读这些线程,但是在观看视频和阅读数小时后,我找不到这个问题的答案:

我需要使用循环在变量中设置元组的一个元素,或者它可以是一个简单的计数器(然后我将能够从计数器中提取值并将其设置为调用以下所有值的指南在元组中,但我尝试的所有形式都不起作用),每一步都将由一个按钮(tkinter)激活。

主要思想是制作一种 Imageroll,按钮将是“NEXT BUTTON”。

我尝试了很多东西,我发布了我在这个网站上找到的这段代码,因为它不是那么复杂(而且有点工作)。


root = Tk()
root.geometry("200x200")
root.title("My Button Increaser")

rollImagenes=["1.png","2.png","3.png", "4.png", "5.png"]

global counter
counter = 0
def nClick():
    global counter
    counter += 1
    mButton1.config(text = counter)
    

print(counter)

mButton1 = Button(text ="NEXT", command = nClick, fg = "darkgreen", bg = "white")
mButton1.pack()

NUMCLICKS=???

root.mainloop()```

标签: pythonloopstkintertuplescounter

解决方案


您可以使用生成器表达式一个接一个地生成每个元素。

在这里,我们一次使用list一个pop元素,在生成它之前将它重新插入到另一端。如果元素的数量变大,您可以使用collections.deque数据结构作为循环,或者更好的是,itertools.cycle.

import tkinter as tk


def _roll(seq):
    while True:
        elt = seq.pop(0)
        seq.append(elt)
        yield elt


def nClick():
    mButton1.config(text=next(roll))


root = tk.Tk()
root.geometry("200x200")
root.title("My Button Increaser")

rollImagenes = ["1.png", "2.png", "3.png", "4.png", "5.png"]
roll = _roll(rollImagenes)

mButton1 = tk.Button(text="NEXT", command=nClick, fg="darkgreen", bg="white")
mButton1.pack()


root.mainloop()

推荐阅读