如何传递按钮的命令功能的返回值作为另一个按钮的命令功能的输入

时间:2019-02-03 11:06:19

标签: python user-interface tkinter

我在Tkinter的新请帮助我。我已经实现了一个模块(PDF2Text.Py),该模块的类具有一个函数(convert_pdf_to_txt(path)),该函数采用pdf文件的路径并将pdf文件转换为文本。

我还实现了另一个模块(TopicModeling.py),该模块的类具有一个函数(creat_LDA_model(text)),该函数接受文本并对该文本进行主题建模。

现在,我想要tkinter GUI,即单击“浏览”按钮时,它将使用filedialog.askopenfilename浏览路径,其命令功能将给定的路径发送到PDF2Text.Py的convert_pdf_to_txt(path)函数。

然后,通过单击“模型”按钮,其命令功能获取文本并将其发送给TopicModeling.py中的creat_LDA_model(text)函数,并在Entry小部件或任何其他小部件类型中显示结果。

我想知道GUI模块的结构;在按钮的命令功能中如何从GUI模块调用或获取参数并将其设置为其他模块/功能。

让我解释更多:

假设这是我的代码:

import tkinter
from tkinter import filedialog
import TopicModeling
import Pdf2Text

window = tkinter.Tk()
window.title("Welcome to test tkinter app")
window.geometry('750x600')# Setting Window Size

lbl = tkinter.Label(window, text="Select a pdf file:", font=("Arial Bold", 15))#Set Label Font Size
lbl.grid(column=0, row=0)#set its position on the form



def Return_pdfText():
          filename =  filedialog.askopenfilename(filetypes = (("pdf files","*.pdf"),("all files","*.*")))    
         mytext = Pdf2Text.Pdf2Text(filename)   
         PdfText=mytext.convert_pdf_to_txt(filename)
         return PdfText

Button=tkinter.Button(window,text="Browse",command=Return_pdfText)
Button.grid(column=0, row=1)

window.mainloop()

我要放置另一个按钮,即“模型”。它的命令函数应获取pdfText作为输入并对其进行建模,如下所示:

Button=tkinter.Button(window,text="Model",command=Model)
Button.grid(column=1, row=1)

def Model(pdfText): #??
    my_LDA_model= TopicModeling.TopicModeling(PdfText)
   model=my_LDA_model.create_lda_model()
   my_LDA_model.WordCloud_topics(model)
   ...????

结果(主题和图形)应在某些小部件的GUI中显示。

我的问题是关于此命令功能的。如何将pdfText传递给模型函数,如何显示结果以及以哪种类型的小部件?

谢谢

1 个答案:

答案 0 :(得分:0)

当您有一个小程序时,最简单的方法是对共享数据使用全局变量:

def Return_pdfText():
    global PdfText  # Put the variable in the global scope
    filename =  filedialog.askopenfilename(filetypes = (("pdf files","*.pdf"),("all files","*.*")))    
    mytext = Pdf2Text.Pdf2Text(filename)   
    PdfText = mytext.convert_pdf_to_txt(filename)   # Assign to global variable

PdfText分配一个值后,该值将可用于Model()函数,而您无需传递它:

def Model():
    my_LDA_model = TopicModeling.TopicModeling(PdfText)
    model = my_LDA_model.create_lda_model()
    my_LDA_model.WordCloud_topics(model)