python tkinter button响应函数返回值_python tkinter是不是不能获得响应函数的返回值啊?求大神解答!这是坑么??...

本文详细探讨了在Python的tkinter库中如何从Button响应函数获取返回值的问题。通过实例代码展示了如何利用全局变量解决函数内部与外部的通信,确保在mainloop之后能够获取到Listbox的选择值。作者指出,由于函数调用的上下文限制,直接在Button的command参数中使用lb.curselection()会报错,因此通过定义全局变量并在函数内部修改其值来达到传递数据的目的。
摘要由CSDN通过智能技术生成

12.20更

转换思维……已经有解决方案了 ,如下:

from tkinter import *

#在函数之外定义一个全局可用的变量,用于在mainloop之后返回。

#它的值在函数中也可以修改,声明global

#这个问题的关键在于:要从python语法方面想问题

# 在语法层面,root、lb是实例,def ok()是函数,它们是平级的。lb.curselection()看起来是执行lb的方法,照理说在这个平级的位置是可以用的(既然lb.pack()能用为什么lb.curselection()不能用?

# 但实际结果是:lb.curselection()比较特殊,只有在command=ok的ok函数内部才可以用感觉大概是因为lb.curselection()调用依赖于command提供的上下文。

#既然ok函数的返回确实拿不到,我们又需要把ok内部的值往外传递,那可以换一种思路:让ok函数直接修改外面的变量。具体实现就是在函数外定义一个变量,然后在函数中声明为global

seq_selected=0

root = Tk()

lb = Listbox(root)

for i in range(10):

lb.insert(END,str(i))

lb.pack()

def ok():

var1=lb.get(lb.curselection())

global seq_selected

seq_selected=var1

root.destroy()

button = Button(root, text="提交", command=ok)

button.pack(side=RIGHT)

#print(lb.get(lb.curselection()))#报错

#root.wait_window(lb)

root.mainloop()

print(seq_selected)

如果要把上述代码全部装进一个函数,那么需要特别注意:seq_selected需要放在函数外。

封装后的代码如下:

seq_selected=0

#这一句一定要在外面,不然在users_choice的返回还是0,作用域问题?

def users_choice():

print('sss')

root = Tk()

lb = Listbox(root)

for i in range(10):

lb.insert(END,str(i))

lb.pack()

def ok():

var1=lb.get(lb.curselection())

global seq_selected

seq_selected=var1

root.destroy()

button = Button(root, text="提交", command=ok)

button.pack(side=RIGHT)

#print(lb.get(lb.curselection()))#报错

#root.wait_window(lb)

root.mainloop()

return (seq_selected)

if __name__=='__main__':

print(users_choice())

print(seq_selected)

#因为seq_selected变量和users_choice()函数平级

#这时可以理解为:users_choice()修改了一个它外部的变量,所以users_choice()甚至可以没有返回

#直接打印该变量这个外部变量即可

原答案:

有同样的问题,我来补一个代码:

from tkinter import *

root = Tk()

lb = Listbox(root)

for i in range(10):

lb.insert(END,str(i*100))

lb.pack()

def ok():

print (lb.curselection())

return (lb.curselection())

button2 = Button(root, text="提交", command=ok).pack(side=RIGHT)

root.mainloop()

问:如何拿到ok()函数的返回值?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值