drawEllipse ничего не показывает на GUI - PullRequest
0 голосов
/ 15 января 2020

Я создал очень простой GUI с помощью дизайнера. Сейчас я пытаюсь нарисовать круг между двумя кнопками pu sh, но по какой-то причине я не могу получить права ... Я попробовал несколько методов, которые искал в Интернете, но ни один из них мне не помог.

это мой код:

from PyQt5 import QtCore, QtGui, QtWidgets

class ApplicationWindow(QtWidgets.QMainWindow):
   def __init__(self):
      super(ApplicationWindow, self).__init__()
      self.ui = Ui_MainWindow()
      self.ui.setupUi(self)

class Ui_MainWindow(object):
   def setupUi(self, MainWindow):
       MainWindow.setObjectName("Dialog")
       MainWindow.resize(298, 207)
       self.centralwidget = QtWidgets.QWidget(MainWindow)
       self.centralwidget.setObjectName("centralwidget")

       self.turnRed = QtWidgets.QPushButton(MainWindow)
       self.turnRed.setGeometry(QtCore.QRect(70, 90, 75, 23))
       self.turnRed.setObjectName("turnRed")

       self.turnBlue = QtWidgets.QPushButton(MainWindow)
       self.turnBlue.setGeometry(QtCore.QRect(190, 90, 75, 23))
       self.turnBlue.setObjectName("turnBlue")
       self.retranslateUi(MainWindow)
       QtCore.QMetaObject.connectSlotsByName(MainWindow)

   def paintEvent(self, e):
       painter = QtGui.QPainter(self)
       painter.setPen(QtGui.QPen(QtCore.Qt.blue, 8, QtCore.Qt.SolidLine))
       painter.drawEllipse(120,60,50,50)



   def retranslateUi(self, MainWindow):
       _translate = QtCore.QCoreApplication.translate
       MainWindow.setWindowTitle(_translate("Dialog", "Dialog"))
       self.turnRed.setText(_translate("Dialog", "RED"))
       self.turnBlue.setText(_translate("Dialog", "GREEN"))



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

И это GUI:

enter image description here

Когда я запускаю это, я вижу оба пу sh кнопки, но я не вижу эллипс / круг? Что я упускаю ??

note

Я знаю, что плохо менять код, сгенерированный дизайнером, но все, что я хочу для этого, - это увидеть эллипс, так что я могу реализовать то же самое в моем проекте.

1 Ответ

1 голос
/ 15 января 2020

Если вы знаете, что изменять код, сгенерированный из конструктора, плохо, так почему вы его извлекаете?

Класс, который наследуется от object, не имеет paintEvent метода

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
   def setupUi(self, MainWindow):
       MainWindow.setObjectName("Dialog")
       MainWindow.resize(298, 207)
       self.centralwidget = QtWidgets.QWidget(MainWindow)
       self.centralwidget.setObjectName("centralwidget")

       self.turnRed = QtWidgets.QPushButton(MainWindow)
       self.turnRed.setGeometry(QtCore.QRect(70, 90, 75, 23))
       self.turnRed.setObjectName("turnRed")

       self.turnBlue = QtWidgets.QPushButton(MainWindow)
       self.turnBlue.setGeometry(QtCore.QRect(190, 90, 75, 23))
       self.turnBlue.setObjectName("turnBlue")
       self.retranslateUi(MainWindow)
       QtCore.QMetaObject.connectSlotsByName(MainWindow)

   def retranslateUi(self, MainWindow):
       _translate = QtCore.QCoreApplication.translate
       MainWindow.setWindowTitle(_translate("Dialog", "Dialog"))
       self.turnRed.setText(_translate("Dialog", "RED"))
       self.turnBlue.setText(_translate("Dialog", "GREEN"))

class ApplicationWindow(QtWidgets.QMainWindow):
   def __init__(self):
      super(ApplicationWindow, self).__init__()
      self.ui = Ui_MainWindow()
      self.ui.setupUi(self)

   def paintEvent(self, e):
       painter = QtGui.QPainter(self)
       painter.setPen(QtGui.QPen(QtCore.Qt.blue, 8, QtCore.Qt.SolidLine))
       painter.drawEllipse(120, 60, 50, 50)


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

enter image description here


Обновление

Но теперь, когда я пытаюсь изменить цвет художника, он не позволяет мне .. Таким образом, в основном, когда я запускаю это, я получаю синий круг, но когда я пытаюсь изменить его (нажав КРАСНУЮ кнопку и подключить его с помощью функции), ничего не происходит. не могли бы вы помочь мне с этим, пожалуйста?

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("Dialog")
        MainWindow.resize(298, 207)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.turnRed = QtWidgets.QPushButton(MainWindow)
        self.turnRed.setGeometry(QtCore.QRect(70, 90, 75, 23))
        self.turnRed.setObjectName("turnRed")

        self.turnBlue = QtWidgets.QPushButton(MainWindow)
        self.turnBlue.setGeometry(QtCore.QRect(190, 90, 75, 23))
        self.turnBlue.setObjectName("turnBlue")
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("Dialog", "Dialog"))
        self.turnRed.setText(_translate("Dialog", "RED"))
        self.turnBlue.setText(_translate("Dialog", "GREEN"))

class ApplicationWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(ApplicationWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.pen = QtGui.QPen(QtCore.Qt.blue, 8, QtCore.Qt.SolidLine)
        self.ui.turnRed.clicked.connect(self.onRed)
        self.ui.turnBlue.clicked.connect(self.onGreen)

    def paintEvent(self, e):
        painter = QtGui.QPainter(self)
        painter.setPen(self.pen)
        painter.drawEllipse(120, 60, 50, 50)

    def onRed(self):
        self.pen = QtGui.QPen(QtCore.Qt.red, 8, QtCore.Qt.SolidLine)
        self.update()

    def onGreen(self):
        self.pen = QtGui.QPen(QtCore.Qt.green, 8, QtCore.Qt.SolidLine)
        self.update()


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

enter image description here

...