如何在多个文件中拆分 Python Tkinter 代码

Posted

技术标签:

【中文标题】如何在多个文件中拆分 Python Tkinter 代码【英文标题】:How do I split up Python Tkinter code in multiple files 【发布时间】:2017-08-29 17:48:15 【问题描述】:

这是我在这里的第一篇文章!

首先这里是我的project 的 github 链接(我也是 github 上的菜鸟)。

已编辑:

这是我想做的一个例子,我有一个大的 Tkinter 类,里面有框架、标签、菜单、按钮以及所有和一些功能。

我想让我的 MakeUI() 中的 UI 描述并将我的函数移动到另一个文件,但我仍然需要访问小部件。

# -*- coding: utf-8 -*-

from tkinter import *
from Interface import *


Fenetre = Tk()
UI = MakeUI(Fenetre)

UI.mainloop()

UI.destroy()

# -*- coding: utf-8 -*-

from tkinter import *
from tkinter.filedialog import *


class MakeUI(Frame):

    def __init__(self, Fenetre, **kwargs):

        # Héritage
        Frame.__init__(self, Fenetre, width=1500, height=700, **kwargs)

        self.pack(fill=BOTH)

        self.FrameInfos = LabelFrame(self, text="Choix des paramètres", padx=2, pady=2)
        self.FrameInfos.pack(fill="both", expand="yes", padx=5, pady=5)

        self.MsgInfosCarte = Label(self.FrameInfos, text="Example", width=45)
        self.MsgInfosCarte.pack(padx=2, pady=2)

    def AfficherCarte(self):
        self.MsgInfosCarte["text"] = "OK"

现在在这个例子中,我需要将 AfficherCarte 函数移动到另一个文件,如 MapFuncs.py 或其他文件。 并且我希望MakeUI能够调用其他文件funcs和其他文件funcs来修改界面。

我无法正确地做到这一点。

感谢您的帮助。

【问题讨论】:

您是否在寻求有关如何拆分 MakeUI 大类的建议? 没错!就像用最后一个 AfficherCarte 这样的 Map 函数创建一个 MapFuncs.py。 请修改您的帖子,以便有一个实际问题。您需要将您询问的特定代码放入问题中,而不仅仅是链接到存储库。具体说明您需要帮助。 请阅读并遵循此处的建议:How to create a Minimal, Complete, and Verifiable example。您可能只需要在两个文件之间拆分十几行代码即可说明如何跨文件拆分 tkinter 代码的一般问题。 已编辑,希望没问题 【参考方案1】:

为了将修改 GUI 小部件的函数移动到单独的文件中,您可以简单地将 widget 实例(或存储此实例的对象)作为 函数的输入参数

def AfficherCarte(UI):
    UI.MsgInfosCarte["text"] = "OK"

import tkinter as tk
from MapFuncs import AfficherCarte

class MakeUI(tk.Frame):

    def __init__(self, Fenetre, **kwargs):

        # Héritage
        tk.Frame.__init__(self, Fenetre, width=1500, height=700, **kwargs)
        self.pack()

        self.FrameInfos = tk.LabelFrame(self, text="Choix des paramètres", padx=2, pady=2)
        self.FrameInfos.pack(fill="both", expand="yes", padx=5, pady=5)

        self.MsgInfosCarte = tk.Label(self.FrameInfos, text="Example", width=45)
        self.MsgInfosCarte.pack(padx=2, pady=2)

        # Call function from external file to modify the GUI
        AfficherCarte(self)

如果您这样做是因为您的代码太大,另一种方法是将您的 GUI 划分为界面的每个主要部分的单独类(请参阅https://***.com/a/17470842/4084269)。

【讨论】:

以上是关于如何在多个文件中拆分 Python Tkinter 代码的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python zipfile 库检查 zip 文件是不是在多个档案中拆分?

如何将 Python 模块拆分为多个文件?

在多处理之前调用 Tkinter 会导致多个窗口?

如何使用python将长音频(EX:1小时)文件拆分为多个短长度(5s)音频文件

如何使用 tkinter 按钮在 python 中写入文件?

如何在 Python 2.7 中使用 tkinter 库 [关闭]