python - PyQt 在现有的前面动态添加小部件
问题描述
我要归档的是创建一个(像素图-)小部件,然后在主小部件前面可见。稍后,这个小部件应该跟随鼠标。
所以我的主要问题是在按下空格键时动态创建一个小部件,然后在其他小部件前面可见,而不创建单独的窗口。
import sys
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtCore import Qt
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.label = QtWidgets.QLabel()
canvas = QtGui.QPixmap(1200, 800)
canvas.fill(QtGui.QColor('#ffffff')) # Fill entire canvas.
self.label.setPixmap(canvas)
self.setCentralWidget(self.label)
self.last_x, self.last_y = None, None
def mouseMoveEvent(self, e):
if self.last_x is None: # First event.
self.last_x = e.x()
self.last_y = e.y()
return # Ignore the first time.
painter = QtGui.QPainter(self.label.pixmap())
painter.drawLine(self.last_x, self.last_y, e.x(), e.y())
painter.end()
self.update()
# Update the origin for next time.
self.last_x = e.x()
self.last_y = e.y()
def mouseReleaseEvent(self, e):
self.last_x = None
self.last_y = None
def keyPressEvent(self, QKeyEvent):
if QKeyEvent.key() == Qt.Key_Space:
block = QtGui.QPixmap(20, 20)
block.fill(QtGui.QColor('blue'))
self.image = QtWidgets.QLabel()
self.image.setPixmap(block)
self.image.move(20,20)
# self.image.raise_()
# self.image.show()
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
如果我在图像上调用 .show() 的位置,将打开一个带有此小部件的单独窗口。但这不是我想要存档的。_raise 似乎根本没有做任何事情。
编辑:我可以通过使用 QStackedLayout 来实现吗?
解决方案
没有父级的小部件将显示为窗口,因此解决方案是将其传递给父级并调用 show() 方法来显示它:
def keyPressEvent(self, QKeyEvent):
if QKeyEvent.key() == Qt.Key_Space:
block = QtGui.QPixmap(20, 20)
block.fill(QtGui.QColor('blue'))
self.image = QtWidgets.QLabel(self.label)
self.image.setPixmap(block)
self.image.move(20,20)
self.image.show()
推荐阅读
- ios - 当我对表情符号进行子串时,它会崩溃。斯威夫特 iOS
- amazon-cloudformation - How to reuse CloudFormation CodeBlocks?
- python - 将一些数组项转换为整数并将它们拆分
- javascript - 为什么 $_SESSION 数组在用 js-script 中的值填充后为空?
- javascript - 在javascript中更改变量的字体系列
- javascript - Javascript:函数前后的返回语句
- postgresql - 在 Kubernetes 上设置 Rundeck - 无法连接到 Postgres 数据库
- java - Java `https.proxyHost` 和 `https.proxyPort` 在使用 google-cloud-storage 时成功然后失败
- django - Django if now = 模板中的发布日期
- python - 如何通过识别模式进行拆分,然后在同一模式的子模式下拆分