【发布时间】:2021-06-24 06:08:17
【问题描述】:
我正在尝试将现有的 Python 类连接到 Tkinter Gui 接口,因此我将能够在 gui 接口中输入现有类的变量。但由于某种原因,我的 tkinter gui 界面没有连接到我现有的 python 类。我已经为 python 函数做了 gui 接口,一切都没有问题,但是对于类它有点棘手。当我将df = Loan(filename = filename_text.get(), settle_date=settle_date_text.get(), semipmts=semipmts_text.get(), share=share_text.get(), summary_dir=summary_dir_text.get()) 放在主循环之后或将其放在应用程序代码上方时,它只会打开 gui 窗口,然后 Python 会显示错误。我将不胜感激任何帮助。这是我的代码:
import pandas as pd
import numpy as np
import tkinter as tk
from tkinter import *
class Loan:
def __init__(self, filename, settle_date, semipmts =4,share= 0, summary_dir=0):
#read csv data
self.data=pd.read_csv(filename)
self.filename=filename
self.data=self.data[['month','p','current_upb','current_interest_rate','dq']]
self.settle_date= settle_date
self.semipmts = semipmts
self.summary_dir = summary_dir
def get_data(self):
self.data['Cal_Int'] = self.data['current_interest_rate']/12 *(self.data['month']+self.data['dq']+1)
self.data['Prn'] = self.data['p']*self.data['current_upb']
self.data['Int'] = self.data['Prn'] *self.data['Cal_Int']
self.data['Semi Int'] = self.data['p'] * self.data['current_upb'] * self.data['current_interest_rate']/12 * self.semipmts
self.data.to_csv(self.summary_dir+" summary.csv")
def combined_final_grid(self):
import glob
path = self.summary_dir
files= glob.glob(path + "/*.csv")
data_frame = pd.DataFrame()
content = []
for filename in files:
df = pd.read_csv(filename, index_col=None)
content.append(df)
data_frame = pd.concat(content)
data_frame.head()
data_frame.to_excel(self.summary_dir + "summary.xlsx" , index=False)
app=Tk()
filename_text = StringVar()
filename_label = Label(app, text='File Path "/"', font=('bold', 12), pady=20)
filename_label.grid(row=0, column=0, sticky=W)
filename_entry = Entry(app, textvariable= filename_text)
filename_entry.grid(row=1, column=0)
settle_date_text = StringVar()
settle_date_label = Label(app, text='Settle Date in "Y-m-d"', font=('bold', 12), pady=20)
settle_date_label.grid(row=0, column=1, sticky=W)
settle_date_entry = Entry(app, textvariable = settle_date_text)
settle_date_entry.grid(row=1, column=1)
semipmts_text = DoubleVar()
semipmts_label = Label(app, text=' Pmts Frequency "/"', font=('bold', 12))
semipmts_label.grid(row=0, column=2, sticky=W)
semipmts_entry = Entry(app, textvariable= semipmts_text)
semipmts_entry.grid(row=1, column=2)
share_text = DoubleVar()
share_label = Label(app, text='Sharing', font=('bold', 12), pady=20)
share_label.grid(row=2, column=0, sticky=W)
share_entry = Entry(app, textvariable = share_text)
share_entry.grid(row=3, column=0)
summary_dir_text = StringVar()
summary_dir_label = Label(app, text='Summary Path', font=('bold', 12), pady=20)
summary_dir_label.grid(row=2, column=1, sticky=W)
summary_dir_entry = Entry(app, textvariable = summary_dir_text )
summary_dir_entry.grid(row=3, column=1)
summary_button =Button(app, text='Get Summary', width=15, command = df.get_data())
summary_button.grid(row=15, column=1, pady=20)
app.title('Loan Level')
app.geometry('500x500')
app.mainloop()
df = Loan(filename = filename_text.get(), settle_date=settle_date_text.get(),
semipmts=semipmts_text.get(), share=share_text.get(), summary_dir=summary_dir_text.get())
【问题讨论】:
-
总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是截图,不是链接到外部门户)有问题(不是评论)。还有其他有用的信息。
-
如果你把它放在
mainloop()之前,那么它会在你看到窗口之前运行它,因为mainloop()创建窗口并运行窗口中的所有函数。如果您在mainloop()之后运行它,那么它会在您关闭窗口后运行,并且某些元素可以是destroy()并从内存中删除。我认为您的按钮应该运行运行Loan()和df.get_data()的功能