在小部件中显示向下箭头

时间:2019-06-19 06:06:18

标签: python pyqt pyqt5

我想在QT设计器中的两个lineEdits之间显示一个向下的箭头(或任何形状)。这似乎很简单,但我似乎找不到答案。我下面的代码显示了我正在尝试做的事情。任何帮助将不胜感激!

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QPainter, QBrush, QPen
from PyQt5.QtCore import Qt

class Ui_Frame(object):
    def setupUi(self, Frame):
        Frame.setObjectName("Frame")
        Frame.resize(472, 408)
        Frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        Frame.setFrameShadow(QtWidgets.QFrame.Raised)

        self.verticalLayout = QtWidgets.QVBoxLayout(Frame)
        self.verticalLayout.setObjectName("verticalLayout")
        self.lineEdit = QtWidgets.QLineEdit(Frame)
        self.lineEdit.setAlignment(QtCore.Qt.AlignCenter)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)
        self.frame = QtWidgets.QFrame(Frame)
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.frame_3 = QtWidgets.QFrame(self.frame)
        self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_3.setObjectName("frame_3")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.frame_3)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.label_2 = QtWidgets.QLabel(self.frame_3)
        self.label_2.setObjectName("label_2")
        self.horizontalLayout_2.addWidget(self.label_2)
        self.lineEdit_4 = QtWidgets.QLineEdit(self.frame_3)
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.horizontalLayout_2.addWidget(self.lineEdit_4)
        self.verticalLayout_2.addWidget(self.frame_3)

        # I would like to paint a shape on this frame (frame_paint) using method paintEvent
        self.frame_paint = QtWidgets.QFrame(self.frame)
        self.frame_paint.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_paint.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_paint.setObjectName("frame_paint")
        self.verticalLayout_2.addWidget(self.frame_paint)


        self.frame_2 = QtWidgets.QFrame(self.frame)
        self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_2.setObjectName("frame_2")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.frame_2)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label = QtWidgets.QLabel(self.frame_2)
        self.label.setObjectName("label")
        self.horizontalLayout.addWidget(self.label)
        self.lineEdit_3 = QtWidgets.QLineEdit(self.frame_2)
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.horizontalLayout.addWidget(self.lineEdit_3)
        self.verticalLayout_2.addWidget(self.frame_2)
        self.verticalLayout.addWidget(self.frame)

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



    def retranslateUi(self, Frame):
        _translate = QtCore.QCoreApplication.translate
        Frame.setWindowTitle(_translate("Frame", "Frame"))
        self.lineEdit.setText(_translate("Frame", "(Name of research project)"))
        self.label_2.setText(_translate("Frame", "Level 1:"))
        self.label.setText(_translate("Frame", "Level 2:"))

    ### I want this paintEvent to go to the self.frame_paint
    def paintEvent(self, e):
        painter = QPainter(self)
        painter.setPen(QPen(Qt.black, 10, Qt.SolidLine))
        painter.drawRect(100, 15, 400, 200)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Frame = QtWidgets.QFrame()
    ui = Ui_Frame()
    ui.setupUi(Frame)
    Frame.show()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:0)

一段时间后,我发现了。我错过了拥有两个py文件并在场景上实现绘画的整个过程。这是我的代码。

class MainWindow_RUA(QtWidgets.QMainWindow, Ui_MainWindow_RUA):
def __init__(self, parent=None):
    super(MainWindow_RUA, self).__init__(parent)
    self.setupUi(self)


    scene = Painter()
    self.graphicsView.setScene(scene)


class Painter(QtWidgets.QGraphicsScene):
def __init__(self, parent=None):
    super().__init__(parent)

    pen = QtGui.QPen(QtGui.QColor(QtCore.Qt.black))
    pen.setWidth(2)
    brush = QtGui.QBrush(pen.color().darker(150))

    self.addLine(100, 200, 100, 100, pen)
    self.addLine(85, 175, 100, 200, pen)
    self.addLine(100, 200, 115, 175, pen)



if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
application = MainWindow_RUA()
application.show()
sys.exit(app.exec_())