我正在使用PyQt并试图在QtDesigner中推广一个小部件.如果我在"头文件"字段中指定包含我的窗口小部件子类的文件的完整模块路径,我能够使它工作.
有没有更好的方法将QtDesigner中的窗口小部件提升为PyQt窗口小部件而无需指定完整的模块路径?
这是一个有希望说明我在说什么的例子:
/PythonModuleRoot/Ui/MainUi.py
from PyQt4 import QtCore, QtGui, uic
class MainUi(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.ui = uic.loadUi(os.path.join(os.path.dirname(__file__), 'MainUi.ui'), self)
Run Code Online (Sandbox Code Playgroud)
/PythonModuleRoot/Ui/CustomWidget.py
from PyQt4 import QtCore, QtGui, uic
class CustomWidget(QtGui.QWidget):
def __init__(self, parent):
QtGui.QWidget.__init__(self, parent)
Run Code Online (Sandbox Code Playgroud)
/PythonModuleRoot/Ui/MainUi.ui
在MainUi.ui中,我提升了一个小部件并将Header文件字段设置为:"PythonModuleRoot.Ui.CustomWidget".
我正在尝试仅使用Python为Qt Designer编写自定义小部件.我正在关注我在网上找到的几个教程,但是没有一个是在工作或者我认为最接近工作的例子.
所以我的问题是:
我阅读、测试并理解了很多来自 Qt 设计器的 QWidgets 使用示例,这些示例已升级到 PyQt5。尽管如此,我无法为我自己处理一个简单的例子。
下面我展示了我的代码,该代码不起作用并尝试解释。
在 Qt 设计器中,我创建了一个简单的 QMainWindow,标准化命名为 MainWindow
我在其中创建了一个标签 QLabel。我将其提升为“neuLabel”类并将其命名为 labelqt。窗口包含 Add 、标题 neulabel.h 和 Promotion --> 一切都很好。
我明白,我必须为 neuLabel 类编写代码。但是:在哪里做呢?
通过非常简单的例子,我尝试了这样的操作:
from PyQt5 import QtWidgets, uic
import sys
uifile_1 = 'testpromote.ui'
form_1, base_1 = uic.loadUiType(uifile_1)
class neuLabel(QLabel, QPixmap):
def __init__(self,title,pixmap,parent):
super().__init__(title,parent)
self.setAcceptDrops(True)
def mousePressEvent(self, e):
QLabel.mousePressEvent(self, e)
if e.button() == QtCore.Qt.LeftButton:
print('press')
class myApp(base_1, form_1):
def __init__(self):
super(base_1,self).__init__()
self.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = myApp() #Dialog()
ex.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
错误是这样的
Traceback (most …Run Code Online (Sandbox Code Playgroud)