鱼C论坛

 找回密码
 立即注册
查看: 7248|回复: 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昨天试了下,没成功,不知道怎么弄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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


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


def open_file():
    filename = take_filename()
    print(filename)


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


if __name__ == '__main__':
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这不是只把值打印出来,并不能取到值啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

使用道具 举报

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

我想在另一个函数使用这个路径,该怎么弄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

def open_file():
    filename = take_filename()
    shiyong(filename)
你把open_file当成一个主程序,里面加入其它函数调用,不就好了么?难道不是这样的意思么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

那如果我添加另外一个按钮,这个按钮按下后会执行另一个函数,这个函数也要用到这个filename,怎么办呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

但是TK昨天试了下,没成功,不知道怎么弄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

我现在就是这样弄得,不过用的是entry组件做的文本框
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

那你把代码贴出来看看呗,我昨天没做出来,学习下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

root = Tk()

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

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

frame1.pack(pady = 5)
mainloop()

然后用v1.get()就可以访问路径了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我一开始也是这样写的
然后在哪里可以v1.get()?还是没法调用啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

你试试这个

from tkinter import *
from tkinter import filedialog

root = Tk()

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

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

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

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

frame1.pack(pady = 5)
mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你试试这个


没试着再添加一个按钮来调函数。。。。。。。。
哎一开始就是这样思路去写了,就少了一个按钮
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-21 18:11:47 | 显示全部楼层
还有一个曲线救国的办法,函数直接修改全局变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 11:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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