私はtkinterを使って、リストからランダムな項目を表示するボタンを作成しています。これを押すと、古いリストと異なる番号が生成されるまで、乱数ジェネレータをループすることによって、リストから新しいアイテムが表示されます。彼らはボタンのように、新しい番号の作成は関数でなければならず、ボタン自体は関数の中にあります。Python:既に実行中の関数に変数を渡す
現在の乱数の変数が適切に更新されていないことがわかりました。値はグローバルに変化しますが、ボタンを含む関数の内部では変化しません。したがって、このボタンが新しい数値を生成する関数を実行すると、前の数値ではなく生成された最初の数値と比較します。
from tkinter import *
import random
global rnum
def Load():
ListPath = (".\\Lists\\test.txt")
f = open(ListPath, "r")
LineList = f.readlines()
rnum = random.randint(0,(LineList.__len__()-1))
load = Tk()
word = Button(load, text = LineList[rnum], command = lambda: NewRN(rnum, word, LineList), font = ("Calibri", 30))
word.pack()
def NewRN(rnum, word, LineList):
rnumold = rnum
while(rnum == rnumold):
rnum = random.randint(0,(LineList.__len__()-1))
word.config(text = LineList[rnum])
return(rnum)
Load()
ボタンを押すと、それがすでに実行された後RNUMバック関数に渡されていないとして、それは、リストから同じ項目が表示されます可能性があります。
誰にもこの問題の解決策がありますか?前もって感謝します。
Load()のコードは一度しか実行されませんが、繰り返し実行するように思えます。それは正確ですか? –
私はそんなことを考えなかった、ありがとう!私は今、新しい乱数ごとに新しい関数を実行することで問題を解決しました。 – Pickselated