python - 如何将按钮的命令函数的返回值作为另一个按钮的命令函数的输入传递
问题描述
我是 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 传递给模型函数,如何显示结果以及在哪种类型的小部件中?
谢谢
解决方案
当你有一个小程序时,最简单的方法是使用全局变量来共享数据:
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)
推荐阅读
- sql - Hibernate Create Criteria 两次加入同一个表 - 尝试了 2 种方法,但有 2 个差异错误
- python-3.x - UnboundLocalError 是由 Python 中全局范围变量的 yield 引起的
- python - python 2.7发送的远程ssh命令
- c++ - 将“8位”(字节)字符串写入二进制文件?
- signal-processing - 使用时滞进行频谱滤波
- c# - 从 C++ 创建 .Net 标准对象
- node.js - MongoDB $set 运算符。尝试更新对象数组中的对象
- tensorflow - 保存模型标准
- firebase - Firebase Google Domains 连接重置
- javascript - 对 mongo 子字段的聚合查询