【问题标题】:return data from a function called by tkinter button从 tkinter 按钮调用的函数返回数据
【发布时间】:2018-12-16 16:49:01
【问题描述】:

我需要从 tkinter 按钮调用的函数中返回数据。

root= Tk()
def random():
    num_1= random.randint(0,12)
    num_2= random.randint(0,3)
    return num_1,num_2

num_1= None
num_2= None
Play=ttk.Button(text="Play",command=random)
Play.grid(row=3,column=0)

root.mainloop()

我不确定返回实际存储变量的位置,因为当我打印 num_1 和 num_2 时都打印 None 而不是预期的随机数。 任何意见将不胜感激。

(我也有一个主循环等)

【问题讨论】:

  • 读回来我意识到代码没有多大意义,但这就是问题所在。我实际上不知道该怎么做(标题)。
  • 你想要返回值。将它们归还在哪里?按钮不能将值返回到任何地方。
  • 很难解释我想问什么,因为实际的代码有 100 行长,但是我通过调用另一个名为 returN() 的函数,然后调用 random( ) 并将 num_1 和 num_2 返回给 returnN()

标签: python function button tkinter


【解决方案1】:

如果您打算将num_1num_2 声明为全局变量,那么您应该在随机函数中声明它。

root= Tk()
def random():
    global num_1, num_2
    num_1= random.randint(0,12)
    num_2= random.randint(0,3)
    return num_1,num_2

num_1= None
num_2= None
Play=ttk.Button(text="Play",command=random)
Play.grid(row=3,column=0)

root.mainloop()

【讨论】:

    【解决方案2】:

    在这种情况下,在函数内部执行您希望函数执行的操作。

    from tkinter import  *
    
    import random
    
    root= Tk()
    def random_():
        num_1= random.randint(0,12)
        num_2= random.randint(0,3)
        # return num_1,num_2
        print(num_1,num_2)
    
    num_1= None
    num_2= None
    Play= Button(text="Play",command=random_)
    Play.grid(row=3,column=0)
    
    root.mainloop()
    

    返回

    如果你这样做会工作

    print(random_)
    

    【讨论】:

      【解决方案3】:

      您可能有一个错误,因为您似乎导入了random module 并调用了您的回调函数random

      这里问题的另一个原因是您影响局部变量而不是全局变量。

      【讨论】:

        【解决方案4】:

        最好不要使用全局变量

        from tkinter import *
        import random
        
        
        def random_(tmp_list):
            tmp_list[0] = random.randint(0, 12)
            tmp_list[1] = random.randint(0, 3)
        
        
        root = Tk()
        tmp_list = [None, None]
        Play=Button(text='Play', command=lambda: random_(tmp_list))
        Play.grid(row=3, column=0)
        root.mainloop()
        
        print(tmp_list[0], tmp_list[1])
        

        【讨论】:

        • 使用 lambda 函数来做这样的事情是一个有趣的想法。虽然它更适合 javascript。
        • 恕我直言,避免使用全局变量是更有趣的想法)
        • 全局变量num_1num_2 将不受函数random(num_1, num_2) 的影响。尝试在root.mainloop() 之后打印num_1num_2 的值。你会得到None
        猜你喜欢
        • 1970-01-01
        • 2021-08-27
        • 1970-01-01
        • 1970-01-01
        • 2013-08-21
        • 1970-01-01
        • 2013-11-10
        • 2014-02-07
        相关资源
        最近更新 更多