Python - GUI 应该在单独的文件中吗?困惑

如何解决Python - GUI 应该在单独的文件中吗?困惑

我在 2 个不同的文件中有 2 个功能 - feature1.py 和 feature2.py

我还有第三个文件 - main.py,它导入两个功能并一起使用。

所以整个程序都是从 main.py 文件运行的

我第一次开始做 GUI,我真的很困惑把代码放在哪里? 我不知道我是否应该在 main.py 中执行此操作,但是例如我无法为 feature1 添加进度条..

是否应该在单独的文件中并将其导入到其他每个文件中?

我不确定这是否重要,但我正在使用带有 tkinter 端口的 PySimpleGUI 创建 GUI。

如果这是个菜鸟问题,请见谅。

解决方法

虽然我知道有支持这两种编码风格的论据,但我创建了一个小示例,希望能阐明如何在单独的文件中进行操作。

文件 1:字符串

class String:
    def __init__(self):
        self.string1 = "Hello World"

    def addString(self,string1,string2):
        return f"{string1} {string2}"

    def findLetter(self,letter):
        if letter in string1:
            return "Occurrence Found"


if __name__ == '__main__':
    string = String()

文件 2:数学运算

class Math():
    def __init__(self):
        self.number1 = 1
        self.number2 = 2
        self.number3 = 3
        self.number4 = 4
        self.number5 = 5

    def addition(self,addend1,addend2):
        sum1 = addend1 + addend2
        return sum1

    def subtraction(self,subtrahend,minuend):
        difference = minuend - subtrahend
        return difference

    def multiplication(self,factor1,factor2):
        product = factor1 * factor2
        return product

    def division(self,dividend,divisor):
        quotient = dividend / divisor
        return quotient

if __name__ == '__main__':
    math = Math()

文件 3:主要

import PySimpleGUI as sg 
import PracticeFunction2
from PracticeFunction1 import String

def main():
    math = PracticeFunction2.Math()
    string = String()
    sg.theme('BlueMono')

    layout =    [
                [sg.Text("\tThis is a test",font=('Times New Roman',18,'bold'))],[sg.Text("1st Number:\t",font=('',14)),sg.Input(default_text="",size=(5,1),key='_number1_',14),justification='center')],[sg.Text("2nd Number:\t",key='_number2_',[sg.T('')],[sg.Button("Add",size=(10,key="_add_"),sg.Button("Subtract",key="_sub_"),sg.Button("Multiply",key="_mult_"),sg.Button("Divide",key="_div_")],[sg.T('Solution:\t',sg.T("\t\t",key='_solution_')],[sg.Text("1st String:\t\t",key='_string1_',[sg.Text("2nd String:\t",key='_string2_',[sg.Button("Add Strings",size=(15,key="_addString_"),sg.Button("Find Letter",key="_findLetter_")],[sg.T('Result:\t',key='_result_')],]

    window = sg.Window("Multiple Files Testing",layout,finalize=True)

    while True:
        event,values = window.Read()
        if event == sg.WIN_CLOSED:
            break

        if event == "_addString_":
            answer = string.addString(values['_string1_'],values['_string2_'])
            window['_result_'].Update(value=f"{answer}")

        if event == '_findLetter_':
            answer = string.findLetter(values['_string1_'],values['_string2_'])
            window['_result_'].Update(value=f"{answer}")

        if event == "_add_":
            number1 = int(values['_number1_'])
            number2 = int(values['_number2_'])
            answer = math.addition(number1,number2)
            window['_solution_'].Update(value=f"{answer}")

        if event == "_sub_":
            number1 = int(values['_number1_'])
            number2 = int(values['_number2_'])
            answer = math.subtraction(number1,number2)
            window['_solution_'].Update(value=f"{answer}")

        if event == "_mult_":
            number1 = int(values['_number1_'])
            number2 = int(values['_number2_'])
            answer = math.multiplication(number1,number2)
            window['_solution_'].Update(value=f"{answer}")

        if event == "_div_":
            number1 = int(values['_number1_'])
            number2 = int(values['_number2_'])
            answer = math.division(number1,number2)
            window['_solution_'].Update(value=f"{answer}")

if __name__ == '__main__':
    main()

说明:文件 1 和 2 包含每当我想使用这些方法时可由 Main 文件调用的类。我的 GUI 完全构建在 Main 文件中,只需在需要时从其他文件中提取即可。现在,如果我开始处理另一个项目,我仍然可以使用我的 Strings 类和我的 Math 类,而不必担心合并 Main 文件的所有不必要的方面。文件 1 和 2 可以在未来的任何项目中重复使用,并且是安全、可靠、可重复使用的代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?