我已经使用QtDesigner制作了ui文件,然后将其用于制作类,例如
class MyPopup1(MyBaseClass, MyClass):
def __init__(self, parent=None):
super(MyPopup1, self).__init__(parent)
self.setupUi(self)
...
当然,我为此使用了一些教程,所以我实际上不确定所有这些操作是什么。但是现在我编写了代码,该代码生成了一个使用QMessageBox
类的弹出窗口,并且我想将此代码移到一个单独的类,以便可以从多个位置调用它。
如何移动此代码以创建MyPopup2
类?
MyPopup2 = QtWidgets.QMessageBox(parent = self.central_widget)
MyPopup2.setWindowTitle("My Popup 2")
MyPopup2.setText("Some text")
MyPopup2.setIcon(QtWidgets.QMessageBox.Question)
MyPopup2.addButton("Btn1", QtWidgets.QMessageBox.RejectRole)
MyPopup2.addButton("Btn2", QtWidgets.QMessageBox.ActionRole)
choice = MyPopup2.exec_()
我知道我可能需要将按钮信号连接到函数,并使用self.done()
将结果发送回呼叫。
对于第二个弹出窗口,将MyBaseClass
和MyClass
放在什么位置上,我感到很困惑。
答案 0 :(得分:1)
Qt Designer提供了一个用于填充窗口小部件的类,因此建议的方法是继承窗口小部件并从所生成的Qt Designer的类继承,例如Qt Designer提供的结构具有以下结构:
class MyClass(object):
def setupUi(self, AAA):
...
self.retranslateUi(AAA)
QtCore.QMetaObject.connectSlotsByName(AAA)
def retranslateUi(self, AAA):
...
然后根据模板,您应选择QMainWindow,QDialog或QWidget作为MyBaseClass并调用setupUi()
,这是您将另一个控件添加到窗口中的方法:
class MyPopup1(MyBaseClass, MyClass):
def __init__(self, parent=None):
super(MyPopup1, self).__init__(parent)
self.setupUi(self)
...
但是在您要创建窗口小部件的情况下,不需要MyClass,因此在您的情况下,解决方案如下:
from PyQt5 import QtWidgets
class MyPopup2(QtWidgets.QMessageBox):
def __init__(self, parent=None):
super(MyPopup2, self).__init__(parent)
self.setWindowTitle("My Popup 2")
self.setText("Some text")
self.setIcon(QtWidgets.QMessageBox.Question)
self.addButton("Btn1", QtWidgets.QMessageBox.RejectRole)
self.addButton("Btn2", QtWidgets.QMessageBox.ActionRole)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
popup = MyPopup2()
if popup.exec_() == QtWidgets.QMessageBox.Accepted:
print("Btn2")
else:
print("Btn1")
答案 1 :(得分:0)
示例的完整解决方案是
=ArrayFormula(join(" ", if(len(split(A1, " "))<3, split(A1, " "), proper(split(A1," ")))))
可以在任何地方用class MyPopup2(QtWidgets.QMessageBox):
def __init__(self, parent=None):
super(NoMatch, self).__init__(parent)
self.setWindowTitle("My Popup 2")
self.setText("Some text")
self.setIcon(QtWidgets.QMessageBox.Question)
self.Btn1 = self.addButton("Btn1", QtWidgets.QMessageBox.RejectRole)
self.Btn2 = self.addButton("Btn2", QtWidgets.QMessageBox.ActionRole)
self.Btn1.clicked.connect(lambda: self.done(QtWidgets.QMessageBox.RejectRole))
self.Btn2.clicked.connect(lambda: self.done(QtWidgets.QMessageBox.ActionRole))
进行呼叫