簡體   English   中英

只有在用戶選擇文件后,如何啟動 function?

[英]How to start function, only after file has been selected by the user?

我正在嘗試創建一個簡單的 GUI,在按下上傳按鈕、選擇文件並上傳它們后,將運行另一個 function。 問題是,無論我嘗試什么,它要么完全阻止 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()

populate(frame) 是 function 我想在提交文件后調用,但是到目前為止我還沒有成功。

我嘗試使用 after() function 和 lambda 通過按下按鈕調用兩個函數,但是到目前為止都沒有工作。

任何幫助表示贊賞。

您可以簡單地在uploadAction()中調用populate() ) ,但您需要將選定的文件傳遞給populate()

from PIL import Image, ImageTk

...

def populate(frame, filenames):
    # do whatever you want on filenames
    # below will show all the selected images in the frame
    for row, fname in enumerate(filenames):
        image = Image.open(fname)
        photo = ImageTk.PhotoImage(image.resize((200, 200), Image.ANTIALIAS))
        label = tk.Label(frame, image=photo)
        label.grid(row=row, column=0)
        label.photo = photo

def uploadAction(event=None):
     filenames = filedialog.askopenfilenames(parent=root, title='Choose files')
     print('Selected:', filenames)
     if filenames:
        populate(frame, filenames) # call populate() on filenames
     return filenames

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM