我有一个文本文件,该文件根据文件名存储数据。我这样做了,因此用户可以选择他们要搜索的文本文件,并且根据他们选择的内容,该文件的数据将显示在该文件的正确标题下。问题在于,由于数据的大小可能会有所不同,因此我似乎无法使标题与文件中的数据保持一致。
我尝试放置文本文件并将其逐行分割,然后为要显示的每一行创建一个标签,但这永远不会与标题对齐,因为标签内的信息实际上可以是任何大小。为了尝试修复它,我尝试将每一行拆分为单独的元素,以为每个元素创建一个标签,但无法正常工作。
def searchPage():
def clearWidgets(chosenFrame):
for widget in chosenFrame.winfo_children():
widget.destroy()
def populateData(dataFrame,searchOptions):
clearWidgets(dataFrame)
rowCount = 0
colCount = 0
searchFileName = searchChoice.get()
with open('{}.txt'.format(searchFileName)) as f:
fileData = ([[item for item in line.strip().split()] for line in f])
print(fileData)
for row in fileData:
rowCount+=1
colCount=0
for element in row:
print(element)
rowData = Label(dataFrame,text=element,font=('Courier',14),anchor='w')
rowData.grid(row=rowCount,column=colCount,padx=5)
colCount+=1
## for index,array in enumerate(fileData):
## rowCount +=1
## print(array)
## for index2,variable in enumerate(array):
## print(index2)
## rowData = Label(dataFrame,text=variable,anchor='w',fg='#CCCCCC',bg='#333333')
## rowData.grid(row=rowCount,column=index)
#for line in fileData:
# rowData = Label(dataFrame,text=line,font=('Courier',14),width=60,anchor='w')
# rowData.grid(row=rowCount,column=0,rowspan=6)
def searches(searchOptions,dataFrame):
clearWidgets(labelFrame)
colCount = 0
headingCount = 0
labels={}
for labelTxt in selections[searchChoice.get()]:
labels[labelTxt] = Label(labelFrame,text=labelTxt,width=15,bg='#CCCCCC',fg='#333333')
labels[labelTxt].grid(sticky=W,row=0,column=colCount,padx=15)
colCount+=1
headingCount+=1
searchWindow = Tk()
searchWindow.title('Search')
searchWindow.configure(bg='#333333')
frame = Frame(searchWindow)
frame.configure(bg='#333333')
frame.grid(row=0,column=0,padx=100,pady=20)
labelFrame = Frame(searchWindow,bg='#333333')
labelFrame.grid(row=1,column=0,sticky=W)
canvFrame = Frame(searchWindow)
canvFrame.grid(row=3,column=0,sticky=NSEW)
canvFrame.columnconfigure(0,weight=1)
scrollFrame = Frame(canvFrame)
scrollFrame.grid(row=2,column=0,stick=NW)
def onFrameConfigure(canvas):
canvas.configure(scrollregion=canvas.bbox("all"))
canvas = Canvas(scrollFrame)
canvas.grid(row=0,column=0)
dataFrame = Frame(canvas,bg='#333333')
vsb = Scrollbar(scrollFrame,orient='vertical',command = canvas.yview)
vsb.grid(row=0,column=1,sticky=NS)
canvas.configure(yscrollcommand=vsb.set,bg='#333333')
#canvas.pack(side='bottom', fill='both', expand=True)
canvas.create_window((4,4),window=dataFrame,anchor='nw')
#dataFrame.update_idletasks()
dataFrame.bind("<Configure>", lambda event, canvas=canvas: onFrameConfigure(canvas))
canvas.configure(width=1250,height=600)
#button config
s = ttk.Style()
s.configure('my.TButton', font=('Courier', 18),height=4,width=10,fg='#333333',bg='#CCCCCC')
#entry config
e = ttk.Style()
e.configure('my.TEntry', font=('Courier', 18),height=4,width=10,fg='#333333',bg='#CCCCCC')
pageTitle = Label(frame,text='Search Database',font=("Courier",44),fg='#CCCCCC',bg='#333333')
pageTitle.grid(row=0,column=0,padx=10,pady=6,columnspan=2)
returnBtn = Button(frame,text='Back',bg='#CCCCCC',fg='#333333',command= lambda:[f() for f in
[searchWindow.destroy,ownermenu]])
returnBtn.place(x=500,y=500)
searchFor = Label(frame,text='Search for: ',font=("Courier",18),fg='#CCCCCC',bg='#333333')
searchFor.grid(row=1,column=0,padx=20)
bookingHeadings = ('ID','CustomerID','InstructorID','CourseID',
'AmountPaid','HoursUsed','HoursRemaining')
courseHeadings = ('ID','Type','Cost')
customerHeadings = ('ID','Forename','Surname','PhoneNum','Postcode',
'LicenseNum')
instructorHeadings = ('ID','Forename','Surname','PhoneNum',
'Postcode','LicenseNum','Password')
lessonHeadings = ('ID','BookingID','Time','Date')
selections = {'Bookings': bookingHeadings, 'Course': courseHeadings,
'Customer': customerHeadings, 'Instructors': instructorHeadings,
'Lessons': lessonHeadings}
searchChoice = StringVar()
searchOptions = ttk.Combobox(frame,values=list(selections.keys()),textvariable=searchChoice)
searchOptions.grid(row=1,column=1)
searchOptions.bind("<<ComboboxSelected>>",lambda x:
[searches(dataFrame,searchOptions),
populateData(dataFrame,searchOptions)])
#populateData(searchOptions,dataFrame)
menubar = Menu(searchWindow)
filemenu = Menu(menubar,tearoff=0)
filemenu.add_command(label='Home',command=lambda:[f() for f in [searchWindow.destroy,home1]])
filemenu.add_separator()
filemenu.add_command(label='Exit',command=searchWindow.destroy)
menubar.add_cascade(label='Page',menu=filemenu)
searchWindow.config(menu=menubar)
searchWindow.overrideredirect(True)
searchWindow.geometry("{0}x{1}+0+0".format(searchWindow.winfo_screenwidth(), searchWindow.winfo_screenheight()))
searchWindow.mainloop()
searchPage()
我希望它读为:
ID姓氏电话号码...
000雅各布·彼得森07793 ...
但是,它的读法是:
ID姓氏电话号码...
000,Jacob,Peterson,077943 ...
因此,它显然没有对齐(我无法按预期格式进行格式化,但第一个示例应对齐)。
复制评论:
我不允许使用csv。