Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建要嵌入QMainWindow的小部件_Python_Pyqt_Pyqt5_Qt Designer - Fatal编程技术网

Python 创建要嵌入QMainWindow的小部件

Python 创建要嵌入QMainWindow的小部件,python,pyqt,pyqt5,qt-designer,Python,Pyqt,Pyqt5,Qt Designer,我有一个我还不能解决的任务。使用PyQt和Qt创建者 我想将在QT Creator中创建的自定义小部件嵌入到另一个QMainWindow中 1) 我要做的步骤: 在QT creator中创建小部件文件: 2) 将其另存为*.ui并应用此行将其转换为*.py文件: pyuic5 gen_settings.ui -o gen_settings.py 3) 打开它,看到它以 from PyQt5 import QtCore, QtGui, QtWidgets class Ui_gen_setti

我有一个我还不能解决的任务。使用PyQt和Qt创建者

我想将在QT Creator中创建的自定义小部件嵌入到另一个QMainWindow中

1) 我要做的步骤:

在QT creator中创建小部件文件:

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)

有什么办法解决吗

首先,我建议你阅读

谈到这个问题,Qt Designer不提供小部件,而是提供一个类作为小部件的接口,这可以在他的声明中看到:

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_main窗口相对应的.ui时,您添加了一个QWidget,它是一个空容器

在图中,窗口小部件容器位于左上角,现在我们将用Gen_设置替换它,因此我们必须使用以下过程:

  • 右键单击小部件容器并选择
    升级到…
    选项
  • 将出现以下对话框并填充如图所示的字段(我假设gen_settings_ui.py和gen_settings.py与current.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
    

    非常感谢。一切都成功了。这样我可以改变这个QWidget吗?我的想法是拥有一个循序渐进的管道GUI,在每个特定的时间,我想根据管道的状态用另一个QWidget来更改这个QWidget。我一直在寻找一些很好的例子,如何以智能的方式设计它,但没有找到任何适合PyQt或Qt本身的例子。也许我完全走错路了。。