【问题标题】:Return value using button [duplicate]使用按钮返回值[重复]
【发布时间】:2016-12-09 07:14:32
【问题描述】:

我正在尝试使用按钮返回一个值,但我无法让它工作。我想要的是返回一个值的按钮,稍后可以用来检查该函数是否被使用。我使用的代码如下:

from Tkinter import *
master = Tk()
master.geometry("200x100")
def bla():
    return 1
Button(master, command = bla, text = 'OK').pack()

if bla == 1:
    print('1')

mainloop()

我也尝试过使用 lambda 来做到这一点,但我也想不通。

【问题讨论】:

    标签: python button tkinter return


    【解决方案1】:

    尝试查看此链接 https://stackoverflow.com/a/11907627/3110529,因为它解决了您遇到的问题。

    主要问题是回调被设计成只是为了响应事件而发生的一种行为,因此它们返回值并不完全有意义。在你的程序中,当你说

    if bla == 1: print('1')

    您是在问函数指针(或引用?)是否等于1,显然它永远不会。

    您可能很想使用全局变量来覆盖这一点(即存储一个“blah”变量,然后让回调设置它的值),但这通常被认为是不好的做法。相反,如链接中所示,尝试将其转换为允许您使用成员变量以更有条理的方式存储回调的结果和响应的类。

    【讨论】:

    • 这实际上比我写的答案要好。在这里,请投我一票。
    【解决方案2】:

    您的问题是您没有保存bla() 的返回值。

    您可以使用全局变量来做到这一点:

    from Tkinter import *
    master = Tk()
    master.geometry("200x100")
    
    gloBla = 0
    def bla():
        global gloBla
        gloBla = 1
    Button(master, command = bla, text = 'OK').pack()
    
    
    mainloop()
    
    if gloBla == 1:
        print('1')
    

    【讨论】:

      【解决方案3】:

      根据 Tknitter 文档 http://effbot.org/tkinterbook/variable.htm,您可以使用 BooleanVar StringVar 或 IntVar。它们作为全局变量起作用。在这个花瓶里 Variable 每按一下按钮就会改变。

      from Tkinter import *
      master = Tk()
      Variable = BooleanVar()
      Variable.set(False)
      
      app = Frame(master, borderwidth=10).grid()
      
      def bla():
          print("1")
          if Variable.get() == 0:Variable.set(True)
          else:Variable.set(False)
          print("current state of Variable: {0} ".format(Variable.get()))
      
      button1= Button(app, text = "Click Me",command=lambda:bla()).grid()
      
      mainloop()
      

      lambda: 命令确保在启动时不调用该函数。

      【讨论】:

        猜你喜欢
        • 2018-12-19
        • 1970-01-01
        • 2015-08-04
        • 2017-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-07
        • 1970-01-01
        相关资源
        最近更新 更多