【发布时间】:2018-01-16 01:37:35
【问题描述】:
这个问题,我指的是https://gist.github.com/zhanglongqi/78d7b5cd24f7d0c42f5d116d967923e7的代码
上面的代码展示了如何在当前小部件上绘制一个叠加层,效果很好。但是我想将参数传递到覆盖类中,并使用这些变量来触发覆盖类中的paintEvent。
我修改代码如下...
# -*- coding:utf-8 -*-
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class overlay(QWidget):
def __init__(self, parent=None):
super(overlay, self).__init__(parent)
palette = QPalette(self.palette())
palette.setColor(palette.Background, Qt.transparent)
self.setPalette(palette)
@pyqtSlot(int)
def getValue(self, a): # variable is received.
self.a = a
print(self.a)
self.update()
def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
painter.setRenderHint(QPainter.Antialiasing)
painter.fillRect(event.rect(), QBrush(QColor(255, 255, 255, 127)))
painter.drawLine(self.width() / 8, self.height() / 8, 7 * self.width() / 8, 7 * self.height() / 8)
painter.drawLine(self.width() / 8, 7 * self.height() / 8, 7 * self.width() / 8, self.height() / 8)
painter.drawLine(self.a , self.a+50, self.a +10, self.a + 100) #Here I want to draw the line using parameter.
painter.setPen(QPen(Qt.NoPen))
class windowOverlay(QWidget):
signal = pyqtSignal(int)
def __init__(self, parent=None):
super(windowOverlay, self).__init__(parent)
self.editor = QTextEdit()
self.editor.setPlainText("OVERLAY" * 100)
self.button = QPushButton("Toggle Overlay")
self.verticalLayout = QVBoxLayout(self)
self.verticalLayout.addWidget(self.editor)
self.verticalLayout.addWidget(self.button)
self.overlay = overlay(self.editor)
self.overlay.hide()
self.button.clicked.connect(self.switch_and_send_signal)
def switch_and_send_signal(self):
if self.overlay.isVisible():
self.overlay.setVisible(False)
else:
self.overlay.setVisible(True)
self.obj = overlay()
a = 100
self.signal.connect(self.obj.getValue)
self.signal.emit(a)
self.signal.disconnect(self.obj.getValue)
def resizeEvent(self, event):
self.overlay.resize(event.size())
event.accept()
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
main = windowOverlay()
main.show()
sys.exit(app.exec_())
问题:
似乎参数已传输,但paintEvent 未更新。参数未到达paintEvent。我做错了什么?
感谢您的帮助!
【问题讨论】: