[英]How to efficiently import user created Widget in MainWindow in PyQt5?
I have created my own widget (It is a group box with a lot of another widgets) called MyWidget
using Qt Designer using the following option: 我创建了我自己的小工具(这是一个有很多其他部件的一组框)称为MyWidget
使用Qt Designer中使用下列选项:
Qt Designer Option Chosen 选择了Qt Designer选项
After creating the widget, I have added further functionality to it using Python enclosed in file Hello.py
. 创建小部件之后,我使用文件Hello.py
包含的Python Hello.py
添加了更多功能。
In my main code ie mainwindow
, I have a combo box and two labels. 在我的主要代码(即mainwindow
,我有一个组合框和两个标签。
Now I would like to import MyWidget
(in Hello.py
) in the main code (in Main.py
) such that MyWidget
appears just under the combobox
in mainwindow
. 现在,我想在主代码(在Main.py
)中导入MyWidget
(在Hello.py
中),使MyWidget
出现在mainwindow
的combobox
mainwindow
。 How can I do it efficiently? 我如何有效地做到这一点?
Hello.py 你好
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MyWidget(object):
def setupUi(self, MyWidget):
MyWidget.setObjectName("MyWidget")
MyWidget.resize(690, 327)
self.gridLayout = QtWidgets.QGridLayout(MyWidget)
self.gridLayout.setObjectName("gridLayout")
self.VP_gridLayout_DefProp = QtWidgets.QGridLayout()
self.VP_gridLayout_DefProp.setObjectName("VP_gridLayout_DefProp")
self.VP_CB_Modulus = QtWidgets.QCheckBox(MyWidget)
self.VP_CB_Modulus.setObjectName("VP_CB_Modulus")
self.VP_gridLayout_DefProp.addWidget(self.VP_CB_Modulus, 2, 3, 1, 1)
self.VP_CB_DT = QtWidgets.QCheckBox(MyWidget)
self.VP_CB_DT.setObjectName("VP_CB_DT")
self.VP_gridLayout_DefProp.addWidget(self.VP_CB_DT, 2, 1, 1, 2)
self.VP_CB_FHC = QtWidgets.QCheckBox(MyWidget)
self.VP_CB_FHC.setObjectName("VP_CB_FHC")
self.VP_gridLayout_DefProp.addWidget(self.VP_CB_FHC, 2, 5, 1, 1)
self.VP_label_Criteria = QtWidgets.QLabel(MyWidget)
self.VP_label_Criteria.setStyleSheet("font: 75 8pt \"MS Shell Dlg 2\";")
self.VP_label_Criteria.setObjectName("VP_label_Criteria")
self.VP_gridLayout_DefProp.addWidget(self.VP_label_Criteria, 2, 0, 1, 1)
self.VP_line_Attenuation = QtWidgets.QLineEdit(MyWidget)
self.VP_line_Attenuation.setObjectName("VP_line_Attenuation")
self.VP_gridLayout_DefProp.addWidget(self.VP_line_Attenuation, 1, 1, 1, 3)
self.VP_CB_PT = QtWidgets.QCheckBox(MyWidget)
self.VP_CB_PT.setObjectName("VP_CB_PT")
self.VP_gridLayout_DefProp.addWidget(self.VP_CB_PT, 2, 4, 1, 1)
self.VP_CB_PC = QtWidgets.QCheckBox(MyWidget)
self.VP_CB_PC.setObjectName("VP_CB_PC")
self.VP_gridLayout_DefProp.addWidget(self.VP_CB_PC, 2, 6, 1, 1)
self.VP_CB_OHT = QtWidgets.QCheckBox(MyWidget)
self.VP_CB_OHT.setObjectName("VP_CB_OHT")
self.VP_gridLayout_DefProp.addWidget(self.VP_CB_OHT, 2, 7, 1, 1)
self.VP_CB_FHT = QtWidgets.QCheckBox(MyWidget)
self.VP_CB_FHT.setObjectName("VP_CB_FHT")
self.VP_gridLayout_DefProp.addWidget(self.VP_CB_FHT, 2, 8, 1, 1)
self.VP_CB_Bearing = QtWidgets.QCheckBox(MyWidget)
self.VP_CB_Bearing.setObjectName("VP_CB_Bearing")
self.VP_gridLayout_DefProp.addWidget(self.VP_CB_Bearing, 2, 9, 1, 1)
self.VP_CB_Pull = QtWidgets.QCheckBox(MyWidget)
self.VP_CB_Pull.setObjectName("VP_CB_Pull")
self.VP_gridLayout_DefProp.addWidget(self.VP_CB_Pull, 2, 10, 1, 1)
self.VP_push_clear = QtWidgets.QPushButton(MyWidget)
self.VP_push_clear.setObjectName("VP_push_clear")
self.VP_gridLayout_DefProp.addWidget(self.VP_push_clear, 3, 5, 1, 2)
self.VP_label_Attenuation = QtWidgets.QLabel(MyWidget)
self.VP_label_Attenuation.setStyleSheet("font: 75 8pt \"MS Shell Dlg 2\";")
self.VP_label_Attenuation.setObjectName("VP_label_Attenuation")
self.VP_gridLayout_DefProp.addWidget(self.VP_label_Attenuation, 1, 0, 1, 1)
self.VP_label_Thickness = QtWidgets.QLabel(MyWidget)
self.VP_label_Thickness.setStyleSheet("font: 75 8pt \"MS Shell Dlg 2\";")
self.VP_label_Thickness.setObjectName("VP_label_Thickness")
self.VP_gridLayout_DefProp.addWidget(self.VP_label_Thickness, 0, 0, 1, 1)
self.VP_radio_grt5 = QtWidgets.QRadioButton(MyWidget)
self.VP_radio_grt5.setObjectName("VP_radio_grt5")
self.VP_gridLayout_DefProp.addWidget(self.VP_radio_grt5, 0, 1, 1, 1)
self.VP_radio_less5 = QtWidgets.QRadioButton(MyWidget)
self.VP_radio_less5.setObjectName("VP_radio_less5")
self.VP_gridLayout_DefProp.addWidget(self.VP_radio_less5, 0, 2, 1, 1)
self.gridLayout.addLayout(self.VP_gridLayout_DefProp, 0, 0, 1, 1)
self.VP_table_Display = QtWidgets.QTableWidget(MyWidget)
self.VP_table_Display.setObjectName("VP_table_Display")
self.VP_table_Display.setColumnCount(4)
self.VP_table_Display.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
item.setFont(font)
self.VP_table_Display.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
item.setFont(font)
self.VP_table_Display.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
item.setFont(font)
self.VP_table_Display.setHorizontalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
item.setFont(font)
self.VP_table_Display.setHorizontalHeaderItem(3, item)
self.gridLayout.addWidget(self.VP_table_Display, 1, 0, 1, 1)
self.VP_label_Attenuation.setBuddy(self.VP_line_Attenuation)
self.retranslateUi(MyWidget)
QtCore.QMetaObject.connectSlotsByName(MyWidget)
#######################################################
#Clear Button
self.VP_push_clear.clicked.connect(lambda:self.clear_table(self.VP_push_clear))
#######################################################
def retranslateUi(self, MyWidget):
_translate = QtCore.QCoreApplication.translate
MyWidget.setWindowTitle(_translate("MyWidget", "VP"))
self.VP_CB_Modulus.setText(_translate("MyWidget", "Modulus"))
self.VP_CB_DT.setText(_translate("MyWidget", "DT:(CAI/CAIE)"))
self.VP_CB_FHC.setText(_translate("MyWidget", "FHC"))
self.VP_label_Criteria.setText(_translate("MyWidget", "Criteria"))
self.VP_CB_PT.setText(_translate("MyWidget", "PT"))
self.VP_CB_PC.setText(_translate("MyWidget", "PC"))
self.VP_CB_OHT.setText(_translate("MyWidget", "OHT"))
self.VP_CB_FHT.setText(_translate("MyWidget", "FHT"))
self.VP_CB_Bearing.setText(_translate("MyWidget", "Bearing"))
self.VP_CB_Pull.setText(_translate("MyWidget", "Pull Through"))
self.VP_push_clear.setText(_translate("MyWidget", "Clear"))
self.VP_label_Attenuation.setText(_translate("MyWidget", "Attenuation (in dB)"))
self.VP_label_Thickness.setText(_translate("MyWidget", "Thickness"))
self.VP_radio_grt5.setText(_translate("MyWidget", ">5mm"))
self.VP_radio_less5.setText(_translate("MyWidget", "<=5mm"))
item = self.VP_table_Display.horizontalHeaderItem(0)
item.setText(_translate("MyWidget", "Thickness"))
item = self.VP_table_Display.horizontalHeaderItem(1)
item.setText(_translate("MyWidget", "Attenuation"))
item = self.VP_table_Display.horizontalHeaderItem(2)
item.setText(_translate("MyWidget", "Criteria"))
item = self.VP_table_Display.horizontalHeaderItem(3)
item.setText(_translate("MyWidget", "KDF"))
#######################################################
def clear_table(self,button):
self.VP_table_Display.setRowCount(0)
Chkbox = [self.VP_CB_Modulus,self.VP_CB_PC,self.VP_CB_FHC,self.VP_CB_DT,self.VP_CB_PT,self.VP_CB_OHT,self.VP_CB_FHT,self.VP_CB_Bearing,self.VP_CB_Pull]
for name in Chkbox:
name.setChecked(False)
#######################################################
if __name__ == "__main__":
import sys
#######################################################
app = QtCore.QCoreApplication.instance()
if app is None:
app = QtWidgets.QApplication(sys.argv)
MyWidget = QtWidgets.QGroupBox()
ui = Ui_MyWidget()
ui.setupUi(MyWidget)
MyWidget.show()
app.exec_()
#######################################################
Main.py 主程序
from PyQt5 import QtCore, QtGui, QtWidgets
#######################################################
import hello.py
#######################################################
class Ui_MainWindow(object):
#######################################################
def MyWid_groupBox(self):
self.window = QtWidgets.QGroupBox()
self.ui = hello.Ui_MyWidget()
self.window.show
#######################################################
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(708, 462)
MainWindow.setFocusPolicy(QtCore.Qt.WheelFocus)
MainWindow.setTabShape(QtWidgets.QTabWidget.Rounded)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout_2.setObjectName("gridLayout_2")
self.VP_push_close = QtWidgets.QPushButton(self.centralwidget)
self.VP_push_close.setObjectName("VP_push_close")
self.gridLayout_2.addWidget(self.VP_push_close, 3, 1, 1, 1)
self.line_separate = QtWidgets.QFrame(self.centralwidget)
self.line_separate.setFrameShape(QtWidgets.QFrame.HLine)
self.line_separate.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_separate.setObjectName("line_separate")
self.gridLayout_2.addWidget(self.line_separate, 1, 0, 1, 2)
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setObjectName("gridLayout")
self.label_DefType = QtWidgets.QLabel(self.centralwidget)
self.label_DefType.setStyleSheet("font: 75 8pt \"MS Shell Dlg 2\";")
self.label_DefType.setObjectName("label_DefType")
self.gridLayout.addWidget(self.label_DefType, 0, 0, 1, 1)
self.combo_Deftype = QtWidgets.QComboBox(self.centralwidget)
self.combo_Deftype.setObjectName("combo_Deftype")
self.combo_Deftype.addItem("")
self.combo_Deftype.addItem("")
self.combo_Deftype.addItem("")
self.gridLayout.addWidget(self.combo_Deftype, 0, 1, 1, 1)
spacerItem = QtWidgets.QSpacerItem(148, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem, 0, 2, 1, 1)
self.label_MDOCLink = QtWidgets.QLabel(self.centralwidget)
self.label_MDOCLink.setStyleSheet("font: 75 8pt \"MS Shell Dlg 2\";")
self.label_MDOCLink.setObjectName("label_MDOCLink")
self.gridLayout.addWidget(self.label_MDOCLink, 0, 3, 1, 1)
self.gridLayout_2.addWidget(self.VolPorosity_groupBox, 2, 0, 1, 2)
self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.label_DefType.setBuddy(self.combo_Deftype)
self.retranslateUi(MainWindow)
self.VP_push_close.clicked.connect(MainWindow.close) #Close Button
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.VP_push_close.setText(_translate("MainWindow", "Close"))
self.label_DefType.setText(_translate("MainWindow", "Choose the Type"))
self.combo_Deftype.setItemText(0, _translate("MainWindow", "-"))
self.combo_Deftype.setItemText(1, _translate("MainWindow", "X"))
if __name__ == "__main__":
import sys
#######################################################
app = QtCore.QCoreApplication.instance()
if app is None:
app = QtWidgets.QApplication(sys.argv)
# app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
app.exec_()
#######################################################
PS : Anything between the long hash lines is a code added by me to code generated by using the Qt designer. PS :长哈希行之间的所有内容都是我添加到使用Qt设计器生成的代码中的代码。
The answer to this question could be find on the following video: PyQt : Open Other Window When Button Clicked . 在以下视频中可以找到该问题的答案: PyQt:单击按钮时打开其他窗口 。 This is quite useful for understanding the way to link different python files generated from .Ui format using Pyuic5 which is further generated from Qt Designer. 这对于理解使用Pyuic5链接从.Ui格式生成的不同python文件的方式非常有用,该文件是从Qt Designer进一步生成的。 This video is specific for PyQt5 and the explanation is just strike on. 该视频是针对PyQt5的,其解释不胜枚举。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.