1.将使用PySide2库创建一个简单的GUI小部件
2.显示一个居中的红色圆形。这个小部件将是一个无边框、始终置顶的窗口,并且具有半透明的背景。
首先,在代码中导入了所需的库,并定义了一个名为 AimWidget
的自定义窗口部件类,继承自 QWidget
。在 __init__
方法中,设置了窗口的属性(无边框和置顶显示),以及窗口的大小和位置(居中显示)。
然后,定义了 getTopLeftPoint
方法来获取窗口的左上角在屏幕中的位置,使窗口能够在屏幕中心显示。接着,重写了 paintEvent
方法,在窗口中绘制了一个红色圆形,并在圆的中心处画了一个点。
最后,在 main
函数中创建了一个 QApplication
应用对象,实例化了 AimWidget
类,并显示该窗口,最后通过 sys.exit(app.exec_())
启动了应用程序的事件循环。
这段代码实现了一个简单的窗口应用程序,窗口中心显示一个红色圆形并标记中心点,适用于展示小型图形或指示器。可以根据实际需求对窗口样式和绘图元素进行定制和扩展。
import sys
from PySide2.QtWidgets import QApplication, QWidget
from PySide2.QtGui import QPainter, QColor
from PySide2.QtCore import Qt
class AimWidget(QWidget):
def __init__(self):
super().__init__()
# 设置窗口属性
self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
self.setAttribute(Qt.WA_TranslucentBackground)
# 设置窗口大小和位置
self.resize(40, 40)
topLeftPoint = self.getTopLeftPoint()
self.move(topLeftPoint[0], topLeftPoint[1])
# 获取窗口显示位置(屏幕中心)
def getTopLeftPoint(self):
screenGeometry = app.primaryScreen().geometry()
windowX = (screenGeometry.width() - 40) // 2
windowY = (screenGeometry.height() - 40) // 2
return windowX, windowY
def paintEvent(self, event):
painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing) # 设置抗锯齿
painter.setPen(QColor(255, 0, 0)) # 设置画笔颜色为红色
size = min(self.width(), self.height()) - 10
x = (self.width() - size) // 2
y = (self.height() - size) // 2
painter.drawEllipse(x, y, size, size) # 绘制圆形
# 计算圆的中心点
centerX = x + size / 2
centerY = y + size / 2
# 在圆的中心画一个点
painter.drawPoint(centerX, centerY)
if __name__ == '__main__':
app = QApplication(sys.argv)
aimWidget = AimWidget()
aimWidget.show()
sys.exit(app.exec_())