在python中将方法从辅助GUI传递到主GUI

Posted

技术标签:

【中文标题】在python中将方法从辅助GUI传递到主GUI【英文标题】:Passing methods from secondary GUI to main GUI in python 【发布时间】:2020-04-15 17:50:06 【问题描述】:

所以我有 2 个 GUI。一个是主 gui,它有一个按钮来激活第二个 gui。第二个 gui 是一个简单的计算器,当我按下带有外部功能的按钮时,它会将两个数字相加。第二个 gui(计算器)独立运行很好但是当我尝试从主 GUI 激活第二个 gui 时,程序崩溃了,所以我可能在做出了点问题。

另外,如果我将 main 中的代码更改为:

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.SumCalcBtn.clicked.connect(self.OpenSecondWindow)

    def OpenSecondWindow(self):
        self.ex = SumCalculator(self)
        self.ex.show()

当我按下按钮对数字求和时,它运行但在第二个 gui 中没有做任何事情。(似乎方法没有传递给实例)

我附上代码以便更好地理解:

main.py

import sys
from calculators import summary
from PyQt5 import QtCore, QtGui, QtWidgets
from SummaryUI import Ui_SummaryUI
from SummaryMain import SumCalc
from MainWindow import Ui_MainWindow


class SumCalculator(SumCalc):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.SumCalcBtn.clicked.connect(self.OpenSecondWindow)

    def OpenSecondWindow(self):
        self.ex = SumCalc(self)
        self.ex.show()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

SummaryMain.py

import sys
from calculators import summary
from PyQt5 import QtCore, QtGui, QtWidgets
from SummaryUI import Ui_SummaryUI


class SumCalc(QtWidgets.QMainWindow, Ui_SummaryUI):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        Ui_SummaryUI.__init__(self)
        self.setupUi(self)
        self.CalculateSumBtn.clicked.connect(self.sum_function)

    def sum_function(self):
        number_a = int(self.FirstNumberInput.text())
        number_b = int(self.SecondNumberInput.text())
        sum = summary(number_a, number_b)
        self.SumResultsValue.setText(str(sum))


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = SumCalc()
    window.show()
    sys.exit(app.exec_())

【问题讨论】:

【参考方案1】:

self.ex = SumCalc(self) 替换为 self.ex = SumCalc() 因为 SumCalc 的构造函数 (__init__) 不带任何参数 (def __init__(self)) 或者将参数 parent 添加到 SumCalc 的构造函数中,使其变为 def __init__(self, parent=none)

【讨论】:

以上是关于在python中将方法从辅助GUI传递到主GUI的主要内容,如果未能解决你的问题,请参考以下文章

从主函数向线程发送信号?

在python运行时将数据从GUI传递给线程

从Python中其他进程中运行的函数调用类方法

如何将数据从异步类传递到主活动类

在Wordpress中将网站从子域移动到主域的问题

在 Databricks 中将字符串从 SCALA 传递到 Python