sea哈 发表于 2020-9-16 23:59:54

tkinter button command如何获得返回值

如下代码所示,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 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()

sea哈 发表于 2020-9-17 15:36:05

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

这不是只把值打印出来,并不能取到值啊{:10_329:}

疾风怪盗 发表于 2020-9-17 16:16:10

sea哈 发表于 2020-9-17 15:36
这不是只把值打印出来,并不能取到值啊

能打印出来,不就已经取到值了么?这个值就是路径咯?还是我理解的不对?所以,你是想要什么值?能不能说的清楚点?
这个open_file()函数,获取有了路径,不就可以写代码来打开文件了么?

sea哈 发表于 2020-9-17 16:27:58

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

我想在另一个函数使用这个路径,该怎么弄

疾风怪盗 发表于 2020-9-17 16:32:05

def shiyong(filename):
    print(filename)

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

你把open_file当成一个主程序,里面加入其它函数调用,不就好了么?{:10_284:}难道不是这样的意思么?

sea哈 发表于 2020-9-17 19:35:21

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

那如果我添加另外一个按钮,这个按钮按下后会执行另一个函数,这个函数也要用到这个filename,怎么办呢{:10_250:}

疾风怪盗 发表于 2020-9-17 19:38:52

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

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

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

但是TK昨天试了下,没成功,不知道怎么弄

sea哈 发表于 2020-9-17 20:26:11

疾风怪盗 发表于 2020-9-17 19:38
那不清楚,没学过,也没做过TK

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

我现在就是这样弄得,不过用的是entry组件做的文本框

疾风怪盗 发表于 2020-9-17 20:28:02

sea哈 发表于 2020-9-17 20:26
我现在就是这样弄得,不过用的是entry组件做的文本框

那你把代码贴出来看看呗,我昨天没做出来,学习下

sea哈 发表于 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()就可以访问路径了

疾风怪盗 发表于 2020-9-17 21:20:02

sea哈 发表于 2020-9-17 20:58
然后用v1.get()就可以访问路径了

我一开始也是这样写的
然后在哪里可以v1.get()?还是没法调用啊

sea哈 发表于 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()

疾风怪盗 发表于 2020-9-17 23:20:45

sea哈 发表于 2020-9-17 23:04
v1.get()就是返回entry内的值

你试试这个

{:10_284:}
没试着再添加一个按钮来调函数。。。。。。。。
哎一开始就是这样思路去写了,就少了一个按钮

悲哀的猫 发表于 2021-2-21 18:11:47

还有一个曲线救国的办法,函数直接修改全局变量
页: [1]
查看完整版本: tkinter button command如何获得返回值