Tkinter 类方法

0 投票
1 回答
984 浏览
提问于 2025-04-20 15:29

好的,我一直在尝试用Tkinter创建一个简单的文本编辑器。遇到了一些问题,我找不到解决办法。如果有人能帮我,我会非常感激。

首先,这是我的代码:

import tkinter as tk
import tkinter.filedialog as tkfile


class PyTedi(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)

        # Instantiate Menu
        main_menu = tk.Menu(self)
        menu_bar = PyTediMenu(main_menu)
        main_menu.add_cascade(label='File', menu=menu_bar)
        self.config(menu=main_menu)

        # Instantiate Text Area
        text_area = PyTediTextArea(self)
        text_area.pack(side=tk.BOTTOM)

        # Instantiate Tool Bar
        tool_bar = PyTediToolBar(self)
        tool_bar.pack(side=tk.TOP)


class PyTediMenu(tk.Menu):
    def __init__(self, parent):
        tk.Menu.__init__(self, parent)

        self.add_command(label='New', command=None)
        self.add_command(label='Open', command=None)
        self.add_command(label='Save', command=tkfile.asksaveasfile)
        self.add_separator()
        self.add_command(label='Exit', command=self.quit)        


class PyTediToolBar(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent, height=30)


class PyTediTextArea(tk.Text):
    def __init__(self, parent):
        tk.Text.__init__(self, parent)


if __name__ == '__main__':
    app = PyTedi()
    app.mainloop()

基本上,我从另一个问题中了解到,创建基于类的组件是个好主意……我的问题是,假设我想创建一个命令——保存文件。所以我在我的菜单里创建了一个方法,并链接到保存功能。但是,我该如何获取文本区域的内容并将其写入文件呢?它们甚至不在同一个类里。这是设计不好的实现,还是只是我搞错了?谢谢!

1 个回答

1

虽然使用基于类的编程是个好主意,但我想指出,如果你并没有对这个小部件进行任何修改,那么创建一个子类其实是完全没必要的。当你创建 PyTediTextArea 这个类时,你并没有对原来的文本类做任何改动,所以你可以简单地把

text_area = PyTediTextArea(self)

改成

self.text_area = tk.Text(self)

这样你就不需要在底部创建子类了,而且在你的主类中的任何地方,你都可以直接调用

self.text_area.get(0, "end")

来获取小部件中的所有文本

James

撰写回答