[英]How to efficiently import user created Widget in MainWindow in PyQt5?
我創建了我自己的小工具(這是一個有很多其他部件的一組框)稱為MyWidget
使用Qt Designer中使用下列選項:
創建小部件之后,我使用文件Hello.py
包含的Python Hello.py
添加了更多功能。
在我的主要代碼(即mainwindow
,我有一個組合框和兩個標簽。
現在,我想在主代碼(在Main.py
)中導入MyWidget
(在Hello.py
中),使MyWidget
出現在mainwindow
的combobox
mainwindow
。 我如何有效地做到這一點?
你好
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_()
#######################################################
主程序
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 :長哈希行之間的所有內容都是我添加到使用Qt設計器生成的代碼中的代碼。
在以下視頻中可以找到該問題的答案: PyQt:單擊按鈕時打開其他窗口 。 這對於理解使用Pyuic5鏈接從.Ui格式生成的不同python文件的方式非常有用,該文件是從Qt Designer進一步生成的。 該視頻是針對PyQt5的,其解釋不勝枚舉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.