【发布时间】:2018-08-25 22:36:00
【问题描述】:
我的主要 python 文件中有一个askopenfilename() 函数,当按下按钮时,它会从用户那里获取一个文件目录。我的主文件名为payroll.py。
我有另一个名为dataframes.py 的文件,它具有使用read_excel() 函数导入excel 文件然后操作数据的功能。
此代码在 payroll.py 中:
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog
import dataframes
class GUI(tk.Tk):
def __init__(self):
super().__init__()
self.title("SportClips Automation 0.0.1")
self.geometry('500x500')
self.resizable(width=False, height=False)
names = ['Instructions', 'Payroll']
self.nb = self.create_notebook(names)
self.menu = self.create_menus()
tab = self.nb.tabs['Instructions']
tk.Label(tab, text='-Select the "Payroll" tab to run Stylist
Compensation Worksheets').pack()
image = tk.PhotoImage(file="1.png")
tk.Label(tab, image=image).pack()
self.mainloop()
def create_notebook(self, names):
nb = MyNotebook(self, names)
nb.pack()
def add_label(parent, text, row, column):
label = ttk.Label(parent, text=text)
label.grid(row=row, column=column, sticky=tk.N, pady=10)
return label
def payroll():
nb.pr = dataframes.runpayroll(nb.name)
def getname():
nb.name = filedialog.askopenfilename(title="Select file",
filetypes=(("excel files",
"*.xls"), ("all files", "*.*")))
tab = nb.tabs['Payroll']
add_label(tab, 'Click this button to process payroll', 1, 8)
b1 = ttk.Button(tab, text="Run Payroll", command= payroll())
b1.grid(row=2, column=8)
b2 = ttk.Button(tab, text="Select SAR file", command=lambda:
getname())
b2.grid(row=3, column=8)
return nb
def create_menus(self):
menu = tk.Menu(self, tearoff=False)
self.config(menu=menu)
sub_menu = tk.Menu(menu, tearoff=False)
menu.add_cascade(label="File", menu=sub_menu)
sub_menu.add_separator()
sub_menu.add_command(label='Exit', command=self.destroy)
return menu
class MyNotebook(ttk.Notebook):
def __init__(self, master, names):
super().__init__(master, width=795, height=475)
# Create tabs & save them by name in a dictionary
self.tabs = {}
for name in names:
self.tabs[name] = tab = ttk.Frame(self)
self.add(tab, text=name)
GUI()
但我猜这个错误:AttributeError: 'MyNotebook' object has no attribute 'name'
【问题讨论】:
-
如果您希望
runpayroll能够访问name,您必须将其作为参数传递。但更大的问题是你似乎没有name来传递它。您在任何地方调用name的唯一东西是该getname()函数中的局部变量,该变量在该函数之外不可用。你用它做的只是return name,但是调用者没有对返回值做任何事情,因为它只是一个 Tkinter 命令回调。 -
我应该将
name = filedialog.askopenfilename(title="Select file", filetypes=(("excel放在哪里,以便能够将名称作为参数传递给runpayroll函数?