我有这个任务还无法解决。使用 PyQt 和 Qt Creator。
我想将在 QT Creator 中创建的自定义创建的小部件嵌入到另一个 QMainWindow 中。
1)我所做的步骤:
在QT Creator中创建一个Widget文件:
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)
有什么想法可以解决吗?
最佳答案
首先我建议您阅读the PyQt docs referring to Qt Designer .
说到问题,Qt Designer 不提供小部件,而是提供一个充当小部件接口(interface)的类,这可以在他的声明中看到:
class Ui_gen_settings(object):
# ...
该类继承自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。
图中,Widget容器是左上角的容器,现在我们将其替换为Gen_Settings,所以我们必须promote它使用以下过程:
- 右键单击小部件容器并选择
升级到...
选项。
- 将出现以下对话框并填写如图所示的字段(我假设 gen_settings_ui.py 和 gen_settings.py 与当前 .ui 位于同一文件夹中)
- 您按“添加”按钮,然后按“升级”按钮。
然后使用 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
关于python - 创建一个小部件嵌入到 QMainWindow 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53544446/