- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在这里尝试的是使 CancelCross 成为 Notifier 类的子级,但是当我这样做时,CancelCross 的十字不可见。但如果我取消它的父子关系,那么它看起来很好。我也尝试用 QMainWindow 来育儿它,但没有成功。我的代码有问题吗?
class CloseCrosss(QtGui.QFrame):
def __init__(self, QWidgetparent = None):
QtGui.QFrame.__init__(self, parent=QWidgetparent)
def paintEvent(self, e):
qp = QtGui.QPainter()
pen = QtGui.QPen(Qt.red)
qp.begin(self)
qp.setPen(pen)
qp.drawLine(460, 10, 470, 20)
qp.drawLine(470, 10, 460, 20)
qp.end()
class Notifier(QtGui.QWidget):
def __init__(self, message=None):
QtGui.QWidget.__init__(self)
self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
_desktop = QtGui.QApplication.desktop()
size = _desktop.screenGeometry()
self.resize(size.width() * 25 / 100, size.height() * 3 / 100)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.main_layout = QtGui.QVBoxLayout()
self.move(size.width() - (size.width() * 25 / 100) - 10, 50)
self.main_layout.setContentsMargins(0, 0, 0, 0)
self.main_layout.setSpacing(0)
self.label = QtGui.QLabel(message)
self.label.setStyleSheet("color: lightgreen; font: 14px;")
self.label.setIndent(20)
self.main_layout.addWidget(self.label)
self.setLayout(self.main_layout)
def paintEvent(self, event):
s = self.size()
qp = QtGui.QPainter()
qp.begin(self)
qp.setRenderHint(QtGui.QPainter.Antialiasing, True)
qp.setPen(QtGui.QColor(255, 255, 255, 200))
qp.setBrush(QtGui.QColor(0, 0, 0, 200))
qp.drawRoundedRect(0, 0, s.width(), s.height(), 5, 5)
qp.end()
def closeEvent(self):
self.kill()
if __name__ == "__main__":
QApp = QtGui.QApplication(sys.argv)
window = Notifier()
cross = CloseCrosss(QWidgetparent=window)
window.show()
cross.show()
QApp.exec_()
最佳答案
子级的位置是相对于其父级的,如果一个小部件没有父级,那么它的位置是相对于屏幕的。该坐标系用于绘制,例如在您的情况下 qp.drawLine(460, 10, 470, 20)
表示您将绘制来自 ( 460, 10)
到 (470, 20)
发送给通知程序。 Notifier 的高度是屏幕的 3%,而对于我的 3% 屏幕来说,它远小于 470,因此该绘画被丢弃。
就你的情况而言,我知道你想绘制一个 10x10 的十字,然后只需绘制该十字,然后将其移动到左上角。
import sys
from PyQt4 import QtCore, QtGui
class CloseCrosss(QtGui.QFrame):
clicked = QtCore.pyqtSignal()
def __init__(self, side=10, parent=None):
QtGui.QFrame.__init__(self, parent)
self._side = side
self.setFixedSize(side, side)
if parent:
parent.installEventFilter(self)
def mouseReleaseEvent(self, event):
self.clicked.emit()
QtGui.QFrame.mouseReleaseEvent(self, event)
def paintEvent(self, e):
qp = QtGui.QPainter(self)
qp.setPen(QtCore.Qt.red)
qp.drawLine(0, 0, self._side, self._side)
qp.drawLine(self._side, 0, 0, self._side)
def eventFilter(self, watched, event):
if watched == self.parentWidget() and self.parentWidget():
if event.type() == QtCore.QEvent.Resize:
self.adjustSize()
return QtGui.QFrame.eventFilter(self, watched, event)
def adjustSize(self):
# move widget to topright
self.move(self.parentWidget().width() -self.width()-5, 5)
class Notifier(QtGui.QWidget):
def __init__(self, message=None):
QtGui.QWidget.__init__(self, flags=QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.FramelessWindowHint)
_desktop = QtGui.QApplication.desktop()
size = _desktop.screenGeometry().size()
self.resize(size.width() * 25 / 100, size.height() * 3 / 100)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.main_layout = QtGui.QVBoxLayout(self)
self.move(size.width() - (size.width() * 25 / 100) - 10, 50)
self.main_layout.setContentsMargins(0, 0, 0, 0)
self.main_layout.setSpacing(0)
self.label = QtGui.QLabel(message)
self.label.setStyleSheet("color: lightgreen; font: 14px;")
self.label.setIndent(20)
self.main_layout.addWidget(self.label)
cross = CloseCrosss(parent=self)
cross.clicked.connect(self.close)
def paintEvent(self, event):
qp = QtGui.QPainter(self)
qp.setRenderHint(QtGui.QPainter.Antialiasing, True)
qp.setPen(QtGui.QColor(255, 255, 255, 200))
qp.setBrush(QtGui.QColor(0, 0, 0, 200))
qp.drawRoundedRect(QtCore.QRect(QtCore.QPoint(), self.size()), 5, 5)
if __name__ == "__main__":
QApp = QtGui.QApplication(sys.argv)
window = Notifier("Hello World")
window.show()
sys.exit(QApp.exec_())
关于python - QFrame 不以 QWidget 作为父级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52142950/
QFrame 问题图片: 我在窗口周围放了一个框架,我的窗口有一个滚动条(仅限垂直滚动条)。 我已将 QFrame 样式设置为 QFrame { border: 8px solid gray;
我正在制作桌面轮播应用。我需要在那里显示图像小部件,其中可能还包含其他子小部件。为此,我使用了带有所需图像作为背景的 QFrame。这是我尝试使用的图像:image link .我想要的是只显示图像,
我正在使用 QFrame 只是为了有彩色边框,因为我找不到改变 QDialog 颜色的方法。所以因为篡改QFrame的边框,它也影响了QLabel的外观,有没有如何避免这种情况? 编辑:这是我正在使用
有没有办法在 PyQt5 中获取 QFrame 的实际大小?我的显示器分辨率是 1920x1080。在我将 QFrame 添加到布局中后,在我的例子中,它填充了整个窗口,大约 1200px。然而 wi
我有一个QFrame,用于绘制一些矩形来表示一天中的某些时间段,例如,用户 sleep 的时间段。 为此,我覆盖了 paintEvent(QPaintEvent *) 函数,并使用 QPainter
假设有一个名为“Draw”的 QPushButton、一个 QLineEdit 和一个 QFrame。单击按钮时,我想从 QLineEdit 中获取一个数字并在 QFrame 中绘制一个圆圈。我怎样才
我想将 VLC 视频播放器放在框架内。每次我运行它时,它都会在新窗口中打开我怎样才能把它放在框架内 这是代码 import sys import os.path from PyQt5.QtCore i
我在这里尝试的是使 CancelCross 成为 Notifier 类的子级,但是当我这样做时,CancelCross 的十字不可见。但如果我取消它的父子关系,那么它看起来很好。我也尝试用 QMain
如何使自定义小部件(派生自“QFrame”)包含可检查/可切换的支持?如何让 Qt 的样式表 (CSS) 知道我的小部件已被用户检查/切换? 是否需要在我的自定义小部件中使用某种信号或属性? 我不想使
我想在 QGraphicsScene 中按垂直顺序一一放置 3 个 QFrames。我尝试使用 QHBoxLayout 和 QLayout 但什么也没有,QGraphicsScene 不接受 QLay
我正在开发自己的小部件,它是一种 TreeView ,但我遇到了一个小问题:我的项目是 QPushButtons,它们位于 QFrame 中,而 QFrame 位于 scrollArea 中。当我部署
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
我已经使用 Qt 设计器创建了一个 QFrame,现在我正在尝试添加一个菜单栏。到目前为止,我发现我可能应该使用 QMainWindow,但我无法再更改类型,而且我没有看到任何附加菜单的选项。 我试图
我创建了一个 QFrame 并添加了一个包含 QSizeGrip 的布局以调整该 QFrame 的大小。 这是我的代码.pp: DragWidget::DragWidget(QWidget *pare
如何将对象放置在 QFrame 的范围内,因为我无法理解它。我已阅读有关 https://doc.qt.io/qtforpython/PySide2/QtWidgets/QFrame.html 的文档
我想在 Qt QFrame 内绘制,但是 QFrame 将有边框。据我了解,paintEvent接收一个与整个frameRect关联的QPainter,所以我必须偏移边框的绘制操作。它是否正确?有没有
请查看附图以了解问题。在图像中您可以看到,如何删除边框线或将其颜色设置为 QDialog 颜色。谢谢。 最佳答案 尝试将 QTabWidget 样式表设置为 0 边框。 例如: tabwidget.s
我需要能够在背景图像顶部的屏幕中显示控件。我已经完成了该任务,并且已经创建并显示了一个控件(一个显示图像的 QLabel)。现在我需要能够通过将标签拖动到我想要移动的位置来移动标签,我已经遵循了几个关
我需要设置一个带有背景图片的QFrame:http://imgur.com/RnSghvV .这是我尝试过的: setAutoFillBackground(true); setWindowFlags(
我想在 Qt 中为提示创建自己的气球窗口。我首先创建一个带圆角的窗口。 我正在使用从 QFrame 继承的类。该类的构造函数包含: this->setWindowFlags(Qt::Window |
我是一名优秀的程序员,十分优秀!