鱼C论坛

 找回密码
 立即注册
查看: 7827|回复: 14

[已解决]tkinter button command如何获得返回值

[复制链接]
发表于 2020-9-16 23:59:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如下代码所示,button的command绑定的函数有一个返回值filename,请大神指教如何获取该返回值。

def open_file():
filename = filedialog.askopenfilename()
return filename

root = tkinter.Tk()

tkinter.Button(root, text='打开文件', command=open_file).grid(row=0,column=0)

mainloop()
最佳答案
2020-9-17 19:38:52
sea哈 发表于 2020-9-17 19:35
那如果我添加另外一个按钮,这个按钮按下后会执行另一个函数,这个函数也要用到这个filename,怎么办呢{: ...

那不清楚,没学过,也没做过TK

pyside2就简单很多了,搞个文本框,把路径放到文本框里,然后其他函数要调用,就获取这个文本框的内容就行了

但是TK昨天试了下,没成功,不知道怎么弄
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-9-17 12:05:06 | 显示全部楼层
网上找了很多案例,好像直接返回值做不到,但是可以曲线救国来操作获取文件路径
而且要使用if __name__ == '__main__':这句代码
可以试试
  1. import tkinter as tk
  2. from tkinter import filedialog


  3. def take_filename():
  4.     filename = filedialog.askopenfilename()
  5.     return filename


  6. def open_file():
  7.     filename = take_filename()
  8.     print(filename)


  9. def main():
  10.     root = tk.Tk()
  11.     tk.Button(root, text='打开文件', command=open_file).grid(row=0, column=0)
  12.     root.mainloop()


  13. if __name__ == '__main__':
  14.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-17 15:36:05 | 显示全部楼层
疾风怪盗 发表于 2020-9-17 12:05
网上找了很多案例,好像直接返回值做不到,但是可以曲线救国来操作获取文件路径
而且要使用if __name__ == ...

这不是只把值打印出来,并不能取到值啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-17 16:16:10 | 显示全部楼层
sea哈 发表于 2020-9-17 15:36
这不是只把值打印出来,并不能取到值啊


能打印出来,不就已经取到值了么?这个值就是路径咯?还是我理解的不对?所以,你是想要什么值?能不能说的清楚点?
这个open_file()函数,获取有了路径,不就可以写代码来打开文件了么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-17 16:27:58 | 显示全部楼层
疾风怪盗 发表于 2020-9-17 16:16
能打印出来,不就已经取到值了么?这个值就是路径咯?还是我理解的不对?所以,你是想要什么值?能不能 ...

我想在另一个函数使用这个路径,该怎么弄
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-17 16:32:05 | 显示全部楼层
  1. def shiyong(filename):
  2.     print(filename)

  3. def open_file():
  4.     filename = take_filename()
  5.     shiyong(filename)
复制代码

你把open_file当成一个主程序,里面加入其它函数调用,不就好了么?难道不是这样的意思么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-17 19:35:21 | 显示全部楼层
疾风怪盗 发表于 2020-9-17 16:32
你把open_file当成一个主程序,里面加入其它函数调用,不就好了么?难道不是这样的意思么?

那如果我添加另外一个按钮,这个按钮按下后会执行另一个函数,这个函数也要用到这个filename,怎么办呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-17 19:38:52 | 显示全部楼层    本楼为最佳答案   
sea哈 发表于 2020-9-17 19:35
那如果我添加另外一个按钮,这个按钮按下后会执行另一个函数,这个函数也要用到这个filename,怎么办呢{: ...

那不清楚,没学过,也没做过TK

pyside2就简单很多了,搞个文本框,把路径放到文本框里,然后其他函数要调用,就获取这个文本框的内容就行了

但是TK昨天试了下,没成功,不知道怎么弄
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-17 20:26:11 | 显示全部楼层
疾风怪盗 发表于 2020-9-17 19:38
那不清楚,没学过,也没做过TK

pyside2就简单很多了,搞个文本框,把路径放到文本框里,然后其他函数 ...

我现在就是这样弄得,不过用的是entry组件做的文本框
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-17 20:28:02 | 显示全部楼层
sea哈 发表于 2020-9-17 20:26
我现在就是这样弄得,不过用的是entry组件做的文本框

那你把代码贴出来看看呗,我昨天没做出来,学习下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-17 20:58:28 | 显示全部楼层
疾风怪盗 发表于 2020-9-17 20:28
那你把代码贴出来看看呗,我昨天没做出来,学习下
  1. from tkinter import *
  2. from tkinter import filedialog

  3. root = Tk()

  4. frame1 = Frame(root)
  5. v1 = StringVar()#路径显示

  6. def openfile():
  7.     filename = filedialog.askopenfilename()
  8.     v1.set(filename)
  9.    
  10. Label(frame1,text = '请选择文件').grid(row=0,column=0,padx = 10,pady = 10)
  11. file_path = Entry(frame1,textvariable = v1,state='readonly',\
  12.                   bg = 'white',width = 30).grid(row=0,column=1)
  13. Button(frame1,text = '打开文件',command = openfile).\
  14.                    grid(row=0,column=2,padx = 30,pady = 10)

  15. frame1.pack(pady = 5)
  16. mainloop()
复制代码


然后用v1.get()就可以访问路径了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-17 21:20:02 | 显示全部楼层
sea哈 发表于 2020-9-17 20:58
然后用v1.get()就可以访问路径了

我一开始也是这样写的
然后在哪里可以v1.get()?还是没法调用啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-17 23:04:13 | 显示全部楼层
疾风怪盗 发表于 2020-9-17 21:20
我一开始也是这样写的
然后在哪里可以v1.get()?还是没法调用啊

v1.get()就是返回entry内的值

你试试这个


  1. from tkinter import *
  2. from tkinter import filedialog

  3. root = Tk()

  4. frame1 = Frame(root)
  5. v1 = StringVar()#路径显示

  6. def openfile():
  7.     filename = filedialog.askopenfilename()
  8.     v1.set(filename)

  9. def fun():
  10.     a = v1.get()
  11.     print (a)
  12. Label(frame1,text = '请选择文件').grid(row=0,column=0,padx = 10,pady = 10)
  13. file_path = Entry(frame1,textvariable = v1,state='readonly',\
  14.                   bg = 'white',width = 30).grid(row=0,column=1)
  15. Button(frame1,text = '打开文件',command = openfile).\
  16.                    grid(row=0,column=2,padx = 30,pady = 10)

  17. Button(frame1,text = '打印文本框',command = fun).\
  18.                    grid(row=1,column=2,padx = 30,pady = 10)

  19. frame1.pack(pady = 5)
  20. mainloop()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-17 23:20:45 | 显示全部楼层
sea哈 发表于 2020-9-17 23:04
v1.get()就是返回entry内的值

你试试这个


没试着再添加一个按钮来调函数。。。。。。。。
哎一开始就是这样思路去写了,就少了一个按钮
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-21 18:11:47 | 显示全部楼层
还有一个曲线救国的办法,函数直接修改全局变量
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-27 12:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表