Как использовать скрипт Python в коде PyQt5 UI виджета - PullRequest
0 голосов
/ 27 июня 2018

У меня есть скрипт pyhton, имеющий некоторый код, приведенный ниже, и файл .ui, преобразованный в файл .py. Теперь я хочу выполнить скрипт Python в коде виджета графического интерфейса? Пожалуйста, помогите мне, как я могу это сделать.

from PyQt5 import QtCore, QtGui, QtWidgets
import DC_gimbal as backend
import hudsup as hp

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(978, 600)
        self.hudsup = hudsup()
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 291, 261))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")

        self.Heads_up = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.Heads_up.setContentsMargins(0, 0, 0, 0)
        self.Heads_up.setObjectName("Heads_up")
        self.widget = QtWidgets.QWidget(self.verticalLayoutWidget)
        self.widget.setObjectName("widget")
        self.HeadsWidget = QtWidgets.QWidget(self.widget)
        self.HeadsWidget.setGeometry(QtCore.QRect(0, 0, 291, 261))
        self.HeadsWidget.setObjectName("HeadsWidget")
        self.Heads_up.addWidget(self.widget)
        self.Heads_up.addWidget(self.huds_Up())

        self.verticalLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(0, 260, 291, 291))
        self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")

        self.widget_3 = QtWidgets.QWidget(self.verticalLayoutWidget_2)
        self.widget_3.setObjectName("widget_3")
        self.displayWidget = QtWidgets.QWidget(self.widget_3)
        self.displayWidget.setGeometry(QtCore.QRect(0, 0, 291, 281))
        self.displayWidget.setObjectName("displayWidget")
        self.verticalLayout.addWidget(self.widget_3)

        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(500, 10, 93, 28))
        self.pushButton.setObjectName("connect")
        self.pushButton.clicked.connect(backend.Noctua_initialise())

        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(620, 10, 93, 28))
        self.pushButton_2.setObjectName("pushButton_2")

        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(740, 10, 93, 28))
        self.pushButton_3.setObjectName("pushButton_3")
        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
        self.tabWidget.setGeometry(QtCore.QRect(290, 330, 561, 211))
        self.tabWidget.setObjectName("tabWidget")
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        self.tabWidget.addTab(self.tab, "")
        self.tab_2 = QtWidgets.QWidget()
        self.tab_2.setObjectName("tab_2")
        self.tabWidget.addTab(self.tab_2, "")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 978, 26))
        self.menubar.setObjectName("menubar")
        self.menuconnect = QtWidgets.QMenu(self.menubar)
        self.menuconnect.setObjectName("menuconnect")
        self.menuDisconnect = QtWidgets.QMenu(self.menubar)
        self.menuDisconnect.setObjectName("menuDisconnect")
        self.menuMode = QtWidgets.QMenu(self.menubar)
        self.menuMode.setObjectName("menuMode")
        self.menuSensors = QtWidgets.QMenu(self.menubar)
        self.menuSensors.setObjectName("menuSensors")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.actionLIDAR = QtWidgets.QAction(MainWindow)
        self.actionLIDAR.setObjectName("actionLIDAR")
        self.actionOpen_CV = QtWidgets.QAction(MainWindow)
        self.actionOpen_CV.setObjectName("actionOpen_CV")
        self.actionManual = QtWidgets.QAction(MainWindow)
        self.actionManual.setObjectName("actionManual")
        self.actionAuto = QtWidgets.QAction(MainWindow)
        self.actionAuto.setObjectName("actionAuto")
        self.actionSettings = QtWidgets.QAction(MainWindow)
        self.actionSettings.setObjectName("actionSettings")
        self.actionCalib = QtWidgets.QAction(MainWindow)
        self.actionCalib.setObjectName("actionCalib")
        self.actionDisconnect = QtWidgets.QAction(MainWindow)
        self.actionDisconnect.setObjectName("actionDisconnect")
        self.menuconnect.addAction(self.actionDisconnect)
        self.menuDisconnect.addAction(self.actionSettings)
        self.menuDisconnect.addAction(self.actionCalib)
        self.menuMode.addAction(self.actionManual)
        self.menuMode.addAction(self.actionAuto)
        self.menuSensors.addAction(self.actionLIDAR)
        self.menuSensors.addAction(self.actionOpen_CV)
        self.menubar.addAction(self.menuconnect.menuAction())
        self.menubar.addAction(self.menuDisconnect.menuAction())
        self.menubar.addAction(self.menuMode.menuAction())
        self.menubar.addAction(self.menuSensors.menuAction())

        self.retranslateUi(MainWindow)
        self.tabWidget.setCurrentIndex(1)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))
        self.pushButton_2.setText(_translate("MainWindow", "PushButton"))
        self.pushButton_3.setText(_translate("MainWindow", "PushButton"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Tab 2"))
        self.menuconnect.setTitle(_translate("MainWindow", "connect"))
        self.menuDisconnect.setTitle(_translate("MainWindow", "configure"))
        self.menuMode.setTitle(_translate("MainWindow", "Mode"))
        self.menuSensors.setTitle(_translate("MainWindow", "Sensors"))
        self.actionLIDAR.setText(_translate("MainWindow", "LIDAR"))
        self.actionOpen_CV.setText(_translate("MainWindow", "Open CV"))
        self.actionManual.setText(_translate("MainWindow", "Manual"))
        self.actionAuto.setText(_translate("MainWindow", "Auto"))
        self.actionSettings.setText(_translate("MainWindow", "Settings"))
        self.actionCalib.setText(_translate("MainWindow", "Calib"))
        self.actionDisconnect.setText(_translate("MainWindow", "Disconnect"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Это мой графический код, и я хочу добавить приведенный ниже файл в headswidget и имя файла hudsup.py:

import sys

import math

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

def rec_line_cord(i,list,xc,origin_list,pitch,roll):
    .
    .

def rec_drawLine(self,i,list,painter,roll,metrics):
    .
    .
    .


def drawMarkings(self, painter):

    .
    .
    .

def drawNeedle(self, painter,roll):

    .
    .
    .

def Compass(self,painter,yaw,r):
  .
  .
  .



class Manager(QObject):
    changedValue = pyqtSignal(tuple)
    def __init__(self):
        QObject.__init__(self)
        filename = "Attitude_data_Manual_1232018_1158.txt"
        res = self.read_content(filename)
        self.results = zip(*res)

        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update_value)
        self.timer.start(100)

    @pyqtSlot()
    def update_value(self):
        try:
            self.changedValue.emit(next(self.results))
        except StopIteration:
            self.timer.stop()


    def read_content(self, filename):
        .
        .
        .

class Widget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.v = None

    @pyqtSlot(tuple)
    def update_value(self, v):
        self.v = v
        self.update()

    def paintEvent(self, event):
        QWidget.paintEvent(self, event)
        painter = QPainter(self)
        r = self.rect()

        .
        .


if __name__ == '__main__':
    app = QApplication(sys.argv)
    manager = Manager()
    w = Widget()
    manager.changedValue.connect(w.update_value)
    w.show()
    sys.exit(app.exec_())

Это мой пример скрипта Python. Вот вывод hudsup.py: Анимированный дисплей huds_up

и мой пользовательский интерфейс выглядит следующим образом, и я хочу, чтобы мой hudsup отображался как упомянуто: Gui

1 Ответ

0 голосов
/ 27 июня 2018

Вы не должны использовать сгенерированный код напрямую, вместо этого создайте новый класс виджетов и наследуйте от него:

class MainWindow(Ui_MainWindow, QMainWindow):
    def __init__(self):
        Ui_MainWindow.__init__(self)
        QMainWindow.__init__(self)

        self.setupUi(self)

Чтобы интегрировать ваш второй виджет, вы можете просто добавить его к Heads_up, как вы делаете сейчас, но не нужно звонить exec_:

        self.hud_sup = HudSup()
        self.Heads_up.addWidget(self.hud_sup)
...