如何将自定义窗口小部件(PyQT)导入Python代码

时间:2018-08-15 23:38:33

标签: python pyqt pyqt5

我使用Qt Designer创建了一个自定义窗口小部件(然后使用pyuic5创建了py文件),但是我无法在代码中使用它。我对此进行了很多搜索,发现应该使用类似这样的东西:

import MyWidget
self.MyWidget = MyWidget.Ui_Form()
self.MyWidget.setupUi(self)

当我尝试使用以下方法将其添加到网格中时:

grid.addWidget(self.MyWidget, 4 ,2)

我收到以下错误代码:

  

TypeError:参数与任何重载调用都不匹配:
  addWidget(self,QWidget):参数1具有意外的类型'Ui_Form'
  addWidget(self,QWidget,int,int,alignment:Union [Qt.Alignment,   Qt.AlignmentFlag] = 0):参数1具有意外的类型'Ui_Form'
  addWidget(self,QWidget,int,int,int,int,对齐方式:   Union [Qt.Alignment,Qt.AlignmentFlag] = 0):参数1意外   输入“ Ui_Form”

该错误是有道理的,我有点理解它的来历,但我不知道如何解决它以及如何使用我的窗口小部件。

Code of my widget generated with pyuic5:
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)
        self.lcdNumber = QtWidgets.QLCDNumber(Form)
        self.lcdNumber.setGeometry(QtCore.QRect(120, 70, 64, 23))
        self.lcdNumber.setObjectName("lcdNumber")
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(120, 40, 71, 16))
        self.label.setObjectName("label")
        self.horizontalSlider = QtWidgets.QSlider(Form)
        self.horizontalSlider.setGeometry(QtCore.QRect(90, 90, 160, 29))
        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider.setObjectName("horizontalSlider")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "Frecuencia"))

顺便说一句,window类和所有其他东西都可以正常工作。我刚刚发布了需要帮助的代码。我在 init 方法中使用了MyWidget.Ui_Form()。

1 个答案:

答案 0 :(得分:0)

Ui_Form不是窗口小部件,它是用于填充窗口小部件的类,因此简单的解决方案如下:

import MyWidget

...
form = MyWidget.Ui_Form()
w = QtWidgets.QWidget()
form.setupUi(w)
grid.addWidget(w, 4 ,2)
...

但是documentation建议创建一个从适当的小部件继承并填充的类:

import MyWidget

class SomeWidget(QtWidgets.QWidget, MyWidget.Ui_Form): 
    def __init__(self, parent=None):
        super(SomeWidget, self).__init__(parent)
        self.setupUi(self)

    ...
    w = SomeWidget()
    grid.addWidget(w, 4 ,2)