Python Tkinter与随机数

Python Tkinter与随机数,python,random,tkinter,Python,Random,Tkinter,刚开始编程,正在学习Tkinter。基于Alan Gauld在线教程中的一个示例编写了这篇文章。我希望标签中会有一个介于1和10之间的随机数,但我得到的似乎是一个介于4000万和5000万之间的随机数,后面是“getRandomNumber”。守则: import random from tkinter import * class randomNumberApp: def __init__(self, parent=0): self.mainWindow = Fram

刚开始编程,正在学习Tkinter。基于Alan Gauld在线教程中的一个示例编写了这篇文章。我希望标签中会有一个介于1和10之间的随机数,但我得到的似乎是一个介于4000万和5000万之间的随机数,后面是“getRandomNumber”。守则:

import random
from tkinter import *

class randomNumberApp:
    def __init__(self, parent=0):
        self.mainWindow = Frame(parent)
        self.fTop = Frame(self.mainWindow)
        self.fTop.pack(fill="both")
        self.lInfo = Label(self.fTop, text="Your number is:")
        self.lInfo.pack(side="left")
        self.lScore = Label(self.fTop, text=self.getRandomNumber)
        self.lScore.pack(side="left")
        self.mainWindow.pack(fill="both")

    def getRandomNumber():
        ability = random.randint(1,10)
        return ability

# top level
top = Tk()
app = randomNumberApp(top)
top.mainloop()
任何帮助都很好

这很有效:

更改为“text=self.getRandomNumber()”并缩进“def getRandomNumber(self):”,因为它更像OP中的代码

import random
from tkinter import *

class randomNumberApp:
    def __init__(self, parent=0):
        self.mainWindow = Frame(parent)
        self.fTop = Frame(self.mainWindow)
        self.fTop.pack(fill="both")
        self.lInfo = Label(self.fTop, text="Your number is:")
        self.lInfo.pack(side="left")
        self.lScore = Label(self.fTop, text=self.getRandomNumber())
        self.lScore.pack(side="left")
        self.mainWindow.pack(fill="both")

    def getRandomNumber(self):
        ability = str(random.randint(1,10))
        return ability

# top level
top = Tk()
app = randomNumberApp(top)
top.mainloop()

问题是,您正在创建一个标签,并且为它的值提供了一个函数。您不希望使用函数作为标签的文本,而是希望调用函数并使用函数为标签返回的内容

与此相反:

self.lScore = Label(self.fTop, text=self.getRandomNumber)
。。。您需要这样做:

self.lScore = Label(self.fTop, text=self.getRandomNumber())
此外,如果
getRandomNumber
是一种方法,则需要将其定义为具有参数
self
,如下例所示:

class randomNumberApp:
    ...
    def getRandomNumber(self):
        ...

有人以
印刷错误
的原因关闭了此。有人能解释一下吗?@sshashank124我没有,但可能是因为
text=self.getRandomNumber
@thefourtheye,实际上在Tkinter中,这是正确的,与人们的期望相反,使用
()
是不正确的。我问了这个问题,但我不确定问题出在哪里(代码和结尾)。有人能解释一下吗?Cheers@sshashank124:你错了。当使用函数作为
命令
属性的值时,使用
()
通常是不正确的,但这种用法在标签中使用
()
调用函数并使用返回值是正确的方法。另一种可能的解决方案是保留
getRandomNumber
,但是给它一个
self
参数。这对我来说只是重现了问题。然后你做错了什么。您仍然需要调用该函数,但它可以是类上的一个方法(使用
self
参数并正确缩进),也可以是一个全局函数(没有self,也没有额外缩进)。需要做两个更改-将self添加到getRandomNumber方法中,并在调用中添加括号。是的,这是正确的。我想我的第一个注释不够精确——在本例中需要括号,然后您可以添加
self
参数,或者执行您所做的操作并将函数移到类的范围之外。