Я пытался разработать простое приложение типа блокнота, используя библиотеку tkinter GUI и python 3.
Пока все работает нормально, но у меня возникла проблема, которую я не смог для разрешения.
Я написал класс, который должен открывать новый список и заполнять его доступными шрифтами. Затем он должен вернуть значение, основанное на том, что пользователь щелкнул для форматирования текста в главном окне.
Все работает, кроме фактического форматирования текста. Я думаю, что он вернется, но я не могу заставить его правильно отформатировать текст. Возможно, этого не произойдет до тех пор, пока я не закрою окно.
Я просто не знаю, как это проверить, чтобы устранить неполадки.
Любая помощь приветствуется.
Вот мой импорт и класс:
from tkinter import *
import tkinter.filedialog
import tkinter.font as tkFont
class fontSelect():
def __init__(self, parent):
self.parent = parent
self.root = Tk()
self.fonts = list(tkFont.families())
self.fonts.sort()
self.scroll = Scrollbar(self.root)
self.scroll.pack(side=RIGHT, fill=BOTH)
self.lb = Listbox(self.root, yscrollcommand=self.scroll.set, width=30, height=20)
self.scroll.config(command=self.lb.yview)
self.lb.bind('<<ListboxSelect>>', self.onSelect)
self.lb.pack()
listnumber = 1
for item in self.fonts:
self.lb.insert(END, item)
listnumber += 1
self.root.mainloop()
def onSelect(self, event):
selected = self.lb.curselection()
#print("'"+self.lb.get(selected[0])+"'")
return "'"+self.lb.get(selected[0])+"'"
def __str__(self):
return 'Initialize new window with font list populated and return name of selected font.'
А вот главное окно приложения:
root = Tk()
cmdFrame = Frame(root)
cmdFrame.pack(side=TOP)
sBar = tkinter.Scrollbar(root)
sBar.pack(side=RIGHT, fill=Y)
text = Text(root, height='40', wrap=WORD, yscrollcommand = sBar.set)
root.geometry('500x600')
sBar.config(command = text.yview)
master = root
menu = Menu(master)
master.config(menu=menu)
fileMenu = Menu(menu)
menu.add_cascade(label='File', menu=fileMenu)
formatMenu = Menu(menu)
menu.add_cascade(label='Format', menu=formatMenu)
def saveAs():
global text
t = text.get('1.0', 'end-1c')
fTypes = [('All Files', '*.*'),('Python Files', '*.py'), ('Text Document', '*.txt')]
saveLoc = tkinter.filedialog.asksaveasfile(mode='w', filetypes= fTypes, defaultextension = fTypes)
if saveLoc is None:
return
saveLoc.write(t)
saveLoc.close()
def openF():
file = tkinter.filedialog.askopenfile(initialdir = '/', title='Select File',filetypes=(('Text files','*.txt'),('all files','*.*')))
if file is None:
return
content = file.read()
text.delete('1.0','end')
text.insert('1.0',content)
def textFormat():
f = fontSelect(root)
text.configure(font=f)
fileMenu.add_command(label='Open', command=openF)
fileMenu.add_command(label='Save As..', command=saveAs)
fileMenu.add_command(label='Quit', command=root.destroy)
formatMenu.add_command(label='Font', command=textFormat)
text.pack()
root.mainloop()