Получить значение списка из класса для перехода в основную программу - PullRequest
0 голосов
/ 08 июля 2020

Я пытался разработать простое приложение типа блокнота, используя библиотеку 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...