如何从另一个 .py 文件调用模块

How to call modules from another .py file

第一次发帖!

我对 python(和编程!)还很陌生,我已经开始制作一个基本的 tkinter 程序。代码现在变得很长,我想在不同的 .py 文件之间拆分它以使其更易于导航。到目前为止,我所有的代码都存在于 classes 中,将主要 window、计算函数、次要 windows 等分开。

第一个问题,像这样拆分代码是否被认为是好的做法?我觉得是,但想确定一下!

其次,在文件之间处理模块的最佳方式是什么?

例如,我在 main_window.py 文件中导入了 tkinter 和 matplotlib。我有 main_window class 函数调用不同的 class ,我想移动到另一个文件,但是这个辅助 class 有一行调用 tkinter。我想通过辅助函数传递 self,以便它使用相同的实例。

这里有一个示例代码来说明。第一个文件,main_window.py:

# main_window.py    

import tkinter as tk
import matplotlib
import matplotlib.pyplot as plt
import app_design  # app_design.py contains the code I want to break out

class MainWindow:
        def __intit__(self, root):
                self.root = root
                self.start_gui()
    
        def start_gui(self):
                # a bunch of code
                ...
                # in reality this is read from a program file on startup                    
                color_mode = "Dark"

                # This is just an example, the matplotlib call in the other app is in the __init__                    
                self.bg_col_mode = tk.StringVar()

                self.bg_col_mode.set(app_design.AppColors(color_mode).background())

                # a bucnh more code of various tk widgets and matplotlib charts
                ...


if __name__ == '__main__':
        app = MainWindow(tk.Tk())
        app.root.mainloop()

然后是一些我想拆分的代码示例。这不是 class 引用 MainWindow class 外部模块的唯一实例,但它可以作为示例:

# app_design.py

class AppColors:
        def __init__(self, color_mode):
                self.color_mode = color_mode

                if self.col_mode == "Dark":
                        self.plt.style.use("Dark")  # it is this .plt call that has moved from the main_window.py file to the new file
                else:
                        self.plt.style.use("Light")

        def background_mode(self):
                if self.color_mode == "Dark":
                        return "#292929"  # colour code
                else:
                        return "#F8F1F1"

希望这是有道理的!

First question, is it considered good practice to split code like this? I feel like it is, but want to make sure!

其实我自己都不知道,我只有后端的代码。

Secondly, how is the best way to handle modules between files?

您只需导入文件(或直接运行)。

示例:

file1.py

def hello(name):
    print("Hello ", name)

file2.py

from file1 import hello

hello("arjix")

这样就可以直接使用函数hello

import .file1

file1.hello("arjix")

PS: 确保这两个文件在同一个文件夹中。