python - drawEllipse 在 GUI 上不显示任何内容
问题描述
我使用设计器创建了一个非常简单的 GUI。我现在正试图在两个按钮之间画一个圆圈,但由于某种原因我无法正确。我尝试了几种我在网上搜索的方法,但没有一个对我有帮助。
这是我的代码:
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_())
这是图形用户界面:
当我运行它时,我看到两个按钮,但我看不到椭圆/圆形?我错过了什么?
笔记
我知道更改设计器生成的代码是不好的,但我想要的只是看到椭圆,这样我就可以在我的项目中实现同样的东西。
解决方案
如果您知道更改从构造函数生成的代码是不好的,那您为什么要弹出它呢?
继承自的类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_())
更新
但是现在我试图改变画家的颜色,它不允许我..所以基本上当我运行这个时我得到蓝色圆圈,但是当我尝试改变它时(通过点击红色按钮并通过一个函数连接它), 没发生什么事。你能帮我看看吗?
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_())
推荐阅读
- python - mpl_finance 无法将 -100000 转换为日期
- bash - LSF 错误:项目必须是 'acc_*'
- c++ - Clang 不会看到标题
- ios - Swift JSON响应两个字段值附加到单个数组中
- ios - 通过 Button 以编程方式将 UITableViewController 替换为 UIViewController 内的 tableView
- c - 带有字符串和整数的堆栈 - C
- python-3.x - TensorFlow 运行时错误——UnimplementedError
- android - 如何为我的 Espresso Activity 测试提供自定义应用程序类?
- css - 跨越多列的列表条目之间的行
- reactjs - ReactJS 通过 cdn 导入模块