我有尚未解决的任务。与PyQt和Qt Creator合作。
我想将在QT Creator中创建的自定义创建的小部件嵌入另一个QMainWindow中。
1)我要做的步骤:
在QT创建者中创建窗口小部件文件:
2)将其另存为* .ui并应用此行将其转换为* .py文件:
pyuic5 gen_settings.ui -o gen_settings.py
3)打开它,看它以
开头from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_gen_settings(object):
def setupUi(self, gen_settings):
gen_settings.setObjectName("gen_settings")
4)当然会导致函数调用:
TypeError: arguments did not match any overloaded call:
addWidget(self, QWidget): argument 1 has unexpected type 'function'
当我在另一个QMainWindow文件中调用它时:
class Ui_MainWindow(object):
def setupUi(self, MainWindow, My_Custom_widget):
MainWindow.setObjectName("MainWindow")
self.gridLayout.addWidget(My_Custom_widget, 1, 4, 1, 1)
任何想法如何解决?
答案 0 :(得分:3)
首先,我建议您阅读the PyQt docs referring to Qt Designer。
要解决这个问题,Qt Designer不提供小部件,而是提供一个类作为小部件的接口,可以从他的声明中看到:
class Ui_gen_settings(object):
# ...
该类继承自对象,而不继承自QWidget,QDialog,QMainWindow等。
在最初指示文档的文档中,建议创建一个窗口小部件并使用Qt Designer提供的界面。为此,使用pyuic是正确的,但是我将gen_settings.py更改为gen_settings_ui.py以便了解更改。
pyuic5 gen_settings.ui -o gen_settings_ui.py
所以现在我们创建一个名为gen_settings.py的文件,其中包含该小部件并使用该界面。
gen_settings.py
from gen_settings_ui import Ui_gen_settings
from PyQt5 import QtWidgets
class Gen_Settings(QtWidgets.QWidget, Ui_gen_settings):
def __init__(self, parent=None):
super(Gen_Settings, self).__init__(parent)
self.setupUi(self)
然后,当您创建与Ui_MainWindow对应的.ui时,将添加一个作为空容器的QWidget。
在图像中,小部件容器是左上角的容器,现在我们将其替换为Gen_Settings,因此我们必须使用以下过程promote对其进行>
Promote To ...
选项。然后使用pyuic将.ui转换为.py,您将获得以下信息:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
# ...
self.widget = Gen_Settings(self.centralwidget)
self.widget.setObjectName("widget")
self.gridLayout.addWidget(self.widget, 0, 0, 1, 1)
# ...
from gen_settings import Gen_Settings