Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 只有在用户选择了文件后,如何启动该功能?_Python_Python 3.x_Tkinter - Fatal编程技术网

Python 只有在用户选择了文件后,如何启动该功能?

Python 只有在用户选择了文件后,如何启动该功能?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我试图创建一个简单的GUI,在按下上传按钮,选择文件并上传后,它将运行另一个功能。问题是,无论我尝试什么,它要么完全停止GUI,要么根本不工作 我当前的代码如下所示 import tkinter as tk from tkinter import * from tkinter import messagebox from tkinter import filedialog def populate(frame): # for image in filename(): #

我试图创建一个简单的GUI,在按下上传按钮,选择文件并上传后,它将运行另一个功能。问题是,无论我尝试什么,它要么完全停止GUI,要么根本不工作

我当前的代码如下所示

import tkinter as tk
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog

def populate(frame):
    # for image in filename():
    #         image = Image.open(image)
    #         photo = ImageTk.PhotoImage(image.resize((200, 200), Image.ANTIALIAS))

    #         label = Label(top_left, image=photo)
    #         label.image = photo
    #         label.pack()

    for row in range(100):
        tk.Label(frame, text="%s" % row, width=3, borderwidth="1", 
                  relief="solid").grid(row=row, column=0)
        t="this is the second column for row %s" %row
        tk.Label(frame, text=t).grid(row=row, column=1)

def onFrameConfigure(canvas):
    '''Reset the scroll region to encompass the inner frame'''
    canvas.configure(scrollregion=canvas.bbox("all"))
    
def uploadAction(event=None):
     filename = filedialog.askopenfilenames(parent=root, title='Choose files')
     print('Selected:', filename)
     return filename
    
def uploadButton():
    UploadButton = Button(root, text='Select image(s)', command=uploadAction)
    UploadButton.place(relx = 0.40, rely = 0.9)# 100,y = 260)
    #UploadButton.pack()

root = tk.Tk()
root.title('Deasease detector')
root.minsize(600,600)

canvas = tk.Canvas(root, borderwidth=5, background="green")
frame = tk.Frame(canvas, background="blue")
vsb = tk.Scrollbar(root, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=vsb.set)

vsb.pack(side="right", fill="y")
canvas.pack(side="left", fill="both", expand=True)
canvas.create_window((4,4), window=frame, anchor="nw")

frame.bind("<Configure>", lambda event, canvas=canvas: onFrameConfigure(canvas))

uploadButton()

populate(frame)# ????????????????????????????????????????

    
root.mainloop()
populateframe是我想在提交文件后调用的函数,但是到目前为止我还没有成功

我尝试使用after函数和lambda通过按钮按下来调用两个函数,但是到目前为止这两个函数都不起作用

非常感谢您的帮助。

您只需在uploadAction内调用populate,但需要传递所选文件以填充:

从PIL导入图像,ImageTk ... def populateframe,文件名: 对文件名执行任何操作 下面将显示帧中所有选定的图像 对于行,枚举文件名中的fname: image=image.openfname photo=ImageTk.PhotoImageimage.Resize200200,Image.ANTIALIAS label=tk.Labelframe,image=photo label.gridrow=row,column=0 label.photo=照片 def uploadActionevent=无: filenames=filedialog.askopenfilenamesparent=root,title='Choose files' 打印“选定:”,文件名 如果文件名为: populateframe,文件名调用填充文件名 返回文件名
打电话给populateFrame。。。内部上传操作。但是,populateFrame与所选文件无关。@acw1668其目的是使用所选文件进行一些操作,并在该帧中显示该操作的结果。这是可能的吗?然后您只需在uploadAction内调用populateFrame并将所选文件作为populateFrame的参数传递。我担心这不起作用,因为我遇到的错误与我以前的代码文件第35行中的错误完全相同,在uploadAction NameError中:如果uploadAction中的语句没有文件名并引发错误,则未定义名称“filenames”。我开始认为我可能需要线程来完成这项工作…@GregorySky filenames是uploadAction中的一个局部变量,所以它不应该有您所说的问题。您是否在filenames=filedialog.openfilenames…行中将filename更改为filenames?我显然是个白痴。非常感谢你的帮助!