python - 如果结果为真,如果结果为假,我如何获得绿色矩形 =(纸 == dict_k)?
问题描述
如果结果为真,我正在尝试使用绿色添加 id 文本和矩形,如果结果为假,则添加红色。我能够从实时数据中获取文本中的 id,但我没有得到带颜色的矩形。有人可以帮我解决这个问题。当我删除矩形块时,我可以获得 id 和 True/False 结果
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
from PyQt5.QtCore import QTimer
import sys
from PyQt5.QtGui import QPainter, QBrush, QPen
from PyQt5.QtCore import Qt
class MainWindow(QMainWindow):
# constructor
def __init__(self):
QMainWindow.__init__(self)
# counter
# self.i = 0
# add QLabel
self.top = 150
self.left = 150
self.width = 1000
self.height = 1000
self.qLbl = QLabel('Not yet initialized')
self.setCentralWidget(self.qLbl)
# make QTimer
self.qTimer = QTimer()
# set interval to 1 s
self.qTimer.setInterval(1000) # 1000 ms = 1 s
# connect timeout signal to signal handler
# label.setFont(QFont('Arial', 20))
self.setStyleSheet("QLabel {font: 16pt Arial}")
self.qTimer.timeout.connect(self.getSensorValue)
self.qTimer.timeout.connect(self.paintevent)
# start timer
self.qTimer.start()
def getSensorValue(self):
# self.i += 1
# print('%d. call of getSensorValue()' % self.i)
id = 'ID1123'
t = neo4jconnection(paper_id=id)
paper = neo4jresultparser(t)
dict_k = jsonfilereader(paper_id=id) # probably not need it
result = (paper == dict_k)
self.qLbl.setText((id +" "+str( result)))
def paintEvent(self, event):
painter = QPainter(self)
painter.setPen(QPen(Qt.green, 5, Qt.SolidLine))
painter.setBrush(QBrush(Qt.green, Qt.SolidPattern))
painter.drawRect(40, 40, 400, 200)
qApp = QApplication(sys.argv)
# setup GUI
qWin = MainWindow()
qWin.setGeometry(100, 100, 1000, 1000)
qWin.show()
# run application
sys.exit(qApp.exec_())
解决方案
你不应该直接调用paintEvent,而是通过update()或repaint()方法,另一方面颜色必须是根据result的值改变的类的属性,然后调用update():
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setStyleSheet("QLabel {font: 16pt Arial}")
self.qLbl = QLabel("Not yet initialized")
self.setCentralWidget(self.qLbl)
self.qTimer = QTimer()
self.qTimer.setInterval(1000)
self.qTimer.timeout.connect(self.getSensorValue)
self.qTimer.start()
self.color = QColor()
def getSensorValue(self):
id_ = "ID1123"
t = neo4jconnection(paper_id=id_)
paper = neo4jresultparser(t)
dict_k = jsonfilereader(paper_id=id_)
result = paper == dict_k
self.qLbl.setText("{} {}".format(id_, result))
self.color = QColor("green") if result else QColor("red")
self.update()
def paintEvent(self, event):
if self.color.isValid():
painter = QPainter(self)
painter.setPen(QPen(self.color, 5, Qt.SolidLine))
painter.setBrush(QBrush(self.color, Qt.SolidPattern))
painter.drawRect(40, 40, 400, 200)
推荐阅读
- airflow - 在 Apache Airflow 中触发 N 个未来的下游任务
- javascript - 选中复选框时如何启用两个texField
- php - 确保调用函数
- r - 将数据框作为参数传递时,用户定义的函数返回错误值
- batch-file - 只要父文件夹中不存在文件,就将所有文件从“旧”文件夹移到父文件夹中
- javascript - Javascript中DOM中函数的__proto__
- sql - SQL Code = -420 在函数“decfloat”的字符串参数中发现无效字符
- java - Spring HATEOAS 构建指向分页资源的链接
- google-app-maker - AppMaker 中的过滤器
- php - PHP表单不向数据库发送数据