【问题标题】:Tkinter Class methodTkinter 类方法
【发布时间】:2014-11-02 19:18:26
【问题描述】:

好的,我一直在尝试在 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()

基本上,我发现,(来自另一个堆栈问题)创建基于类的组件是个好主意......我的问题是,假设我想创建一个命令 -> 保存文件。所以我在我的菜单中创建了一个方法并链接到保存功能。但是,如何获取文本区域内容并将其写入文件?他们甚至不是同一类的一部分。这是一个糟糕的设计实现还是只是我? 谢谢!

【问题讨论】:

  • 您可以传递对主类的引用或要保存到菜单的文本字段。
  • 你会怎么做?抱歉,我是个初学者……在应用程序中定义方法来启动程序会更好吗?

标签: python class tkinter


【解决方案1】:

虽然使用基于类的编程是一个好主意,但我想指出,除非您以某种方式修改小部件,否则在创建类 PyTediTextArea 时完全没有必要对其进行子类化实际上以任何方式修改原始文本类,因此您只需更改即可更简单

text_area = PyTediTextArea(self)

self.text_area = tk.Text(self)

这样你就可以在底部和你的主类的任何地方进行子类化,你可以简单地调用

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

获取小部件中的所有文本

詹姆斯

【讨论】:

  • 这就是我要做的!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 2021-07-29
  • 2019-02-19
  • 1970-01-01
相关资源
最近更新 更多