Python:将变量传递给已经运行的函数

时间:2017-08-23 16:27:32

标签: python function tkinter parameters

所以我使用tkinter创建一个按钮,显示列表中的随机项。按下时,它会显示一个来自所述列表的新项目,方法是循环一个随机数生成器,直到它创建一个与旧数字不同的数字。因为它们是tkinter按钮,所以新数字的创建必须是一个函数,并且按钮本身在函数内部。

我发现当前随机数的变量没有正确刷新。值在全局变化但不在包含按钮的函数内部,因此当所述按钮运行函数以生成新数字时,它会根据生成的第一个数字而不是前一个数字进行检查。

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一旦运行就没有传回函数。

有没有人能解决这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:1)

您的代码中存在许多尴尬。您应该尊重命名约定。见PEP8

使用global

global rnum

分析后, rnum 似乎不是全局变量,或者您不将其用作全局变量。无论如何,global关键字仅在函数内有用。请参阅此问题Use of “global” keyword in Python

ListPath = (".\\Lists\\test.txt")

听起来是list,但事实并非如此!实际上,这是一个字符串。 所以,你可以写下来:

ListPath = ".\\Lists\\test.txt"

要打开文件,请使用with语句。请参阅Reading and Writing files

with open(ListPath, "r") as f:
    LineList = f.readlines()

要获取列表的长度,请使用len()函数:

rnum = random.randint(0, len(LineList) - 1)

我没有看到任何"主循环"在你的程序中。请参阅文档中的example