我正在努力为我试图构建的tkinter应用程序找到解决方案
我试图构建的是一个工具,用于为excel文件提取工作表和标题。我想让用户能够选择他们想要从中提取的图纸和标题
class myApp:
importedSheets = []
us_sheets = None
headers = []
us_headers = None
def UploadAction(self):
self.filename = askopenfilename()
print(self.filename)
def sheetnames(self):
global importedSheets
self.xlssheets = xlrd.open_workbook(self.filename,on_demand=True)
importedSheets = self.xlssheets.sheet_names()
#print (importedSheets)
return importedSheets
我可以让用户选择要从中提取信息的文件,并使用正确的工作表名称填充空列表importedSheets=[]
我似乎不知道如何在Tkinter组合框上显示此列表。每次我尝试它,它只是显示一个空白的组合框
def __init__(self,master):
self.filename = None
self.master = master
self.cbox_sheets = Combobox(master = master,values = myApp.importedSheets,postcommand = self.sheetnames).pack()
import pandas as pd
import os
import xlrd
from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.ttk import Combobox
import tkinter as tk
import re
import numpy as np
class myApp:
importedSheets = []
us_sheets = None
headers = []
us_headers = None
def UploadAction(self):
self.filename = askopenfilename()
print(self.filename)
def sheetnames(self):
global importedSheets
self.xlssheets = xlrd.open_workbook(self.filename,on_demand=True)
importedSheets = self.xlssheets.sheet_names()
#print (importedSheets)
return importedSheets
def showsheets(self):
return myApp.importedSheets()
def __init__(self,master):
self.filename = None
self.master = master
self.frame1 = Frame(master=master,relief=RAISED,borderwidth=1)
self.frame1.pack(padx=10,pady=10)
self.frame2 = Frame(master=master,relief=RAISED,borderwidth=1)
self.frame2.pack(padx=10,pady=10)
self.frame3 = Frame(master=master,relief=RAISED,borderwidth=1)
self.frame3.pack(padx=10,pady=10)
self.frame2a = Frame(master = self.frame2)
self.frame2b = Frame(master = self.frame2)
self.frame2r = Frame(master = self.frame2)
self.frame2a.pack(side=TOP)
self.frame2b.pack(side=LEFT)
self.frame2r.pack(side=RIGHT)
self.uploadLabel = Label(master = self.frame2a,text = 'Select the file you want to import',font=(None,12)).pack()
self.uploadButton = Button(master = self.frame2a,text = 'Import',command = lambda:self.UploadAction()).pack()
self.sheetLabel = Label(master = self.frame2b,text = 'Select the sheet to extract',font=(None,12)).pack(padx=15)
self.cbox_sheets = Combobox(master = self.frame2b,values = myApp.importedSheets,postcommand = self.sheetnames).pack()
self.headerLabel = Label(master = self.frame2r,text = 'Select the header with data',font=(None,12)).pack(padx=15)
if __name__ == '__main__':
root = Tk()
my_gui = myApp(root)
root.mainloop()
奇怪的是,代码对我来说仍然是个谜,但就这个问题而言,您应该如何编辑combobox声明:
也许您也应该为所有其他小部件执行此操作。现在只需将函数更改为:
也许
showsheet()
也应该有一个变化:另外,无论你在哪里说
myApp.whatever
,你都可以把它改成self.whatever
,我认为这样说更准确。在这段代码上可能还有更多的改进要做,但是现在,这应该可以让您运行并回答您的问题相关问题 更多 >
编程相关推荐