发布于 2023-12-08 19:58582浏览比较复杂的流程各种if判断和循环太多看起来不方便,我做了个工具,可以显示出彩色的线条,这样比较方便,如下图所示:
视频演示: 点击查看视频

1. 电脑分辨率需要是1920*1080,大部分人都是这个分辨率,如果不是这个分辨率显示会不正确,如果你会改也可以自己改改。
2. 电脑要有python环境,网上有大把教程,这个就不讲了。
3. 需要安装 PyQt5 ,安装方法:在命令提示符窗口中输入 pip install PyQt5 这个可能比较慢,也可以复制下面的代码使用清华大学的PyPI镜像站,可以加速包的下载。
pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple4.安装后在电脑桌面新建一个txt文件,打开后复制底部的代码粘贴到里面,保存后把文件后缀的 .txt 重命名为 .py 或 .pyw 建议命名为 .pyw 这样不会弹出那个没用的黑窗口
代码:
import sys
from PyQt5 import QtWidgets, QtGui, QtCore
class TransparentWindow(QtWidgets.QWidget):
def __init__(self, num_lines, distance_between_lines):
super().__init__()
self.num_lines = num_lines
self.distance_between_lines = distance_between_lines
self.colors = [QtCore.Qt.red, QtCore.Qt.green, QtCore.Qt.blue, QtCore.Qt.yellow, QtCore.Qt.magenta] * ((num_lines // 5) + 1)
self.lines_visible = True
self.hide_lines = False # 新增变量用于判断是否隐藏
self.initUI()
def toggle_lines(self, state):
self.lines_visible = state
self.update()
def set_hide_lines(self, hide):
self.hide_lines = hide
self.update()
def initUI(self):
self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.showFullScreen()
def paintEvent(self, event):
if self.lines_visible:
qp = QtGui.QPainter()
qp.begin(self)
self.drawLines(qp)
qp.end()
def drawLines(self, qp):
x_position = 157 if self.hide_lines else 360 # 根据 hide_lines 决定横向位置
top_position = 124 # 顶部起始位置
bottom_position = 794 # 原本的底部结束位置
# 总长度区间变量保持不变
total_length = bottom_position - top_position
# 计算最长线的长度
max_length = total_length
# 最短线的长度为最长线的 (num_lines - 1) * 10% 减少的长度
min_length = max_length - (self.num_lines - 1) * max_length * 0.1
# 中心线位置(垂直居中)
center_position = top_position + total_length / 2
for i in range(self.num_lines):
# 计算当前线的长度,按照比例递减
current_line_length = max_length - i * (max_length - min_length) / (self.num_lines - 1)
# 根据当前线的长度计算顶部和底部位置
line_top = center_position - current_line_length / 2
line_bottom = center_position + current_line_length / 2
qp.setPen(QtGui.QPen(self.colors[i % len(self.colors)], 2, QtCore.Qt.SolidLine))
qp.drawLine(x_position + i * self.distance_between_lines, line_top, x_position + i * self.distance_between_lines, line_bottom)
class ControlPanel(QtWidgets.QWidget):
def __init__(self, transparent_window):
super().__init__()
self.transparent_window = transparent_window
self.initUI()
def initUI(self):
self.setWindowTitle('控制面板')
self.setGeometry(1678, 850, 230, 150) # 调整大小
# 线条显示控制复选框
self.toggle_button = QtWidgets.QCheckBox("显示线条", self)
self.toggle_button.setChecked(True)
self.toggle_button.stateChanged.connect(self.transparent_window.toggle_lines)
self.toggle_button.setFont(QtGui.QFont("Arial", 12)) # 调整字体大小
self.toggle_button.move(70, 20)
# 置顶控制复选框
self.stay_on_top_button = QtWidgets.QCheckBox("置顶控制面板", self)
self.stay_on_top_button.setChecked(True)
self.stay_on_top_button.stateChanged.connect(self.toggle_stay_on_top)
self.stay_on_top_button.setFont(QtGui.QFont("Arial", 12)) # 调整字体大小
self.stay_on_top_button.move(70, 70)
# 新增复选框控制线条的起始横向位置
self.hide_checkbox = QtWidgets.QCheckBox("隐藏指令", self)
self.hide_checkbox.stateChanged.connect(self.toggle_hide)
self.hide_checkbox.setFont(QtGui.QFont("Arial", 12)) # 调整字体大小
self.hide_checkbox.move(70, 120)
# 设置窗口默认置顶
self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint)
self.show()
def toggle_stay_on_top(self, state):
if state == QtCore.Qt.Checked:
self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint)
else:
self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowStaysOnTopHint)
self.show() # 重新显示控制面板以应用窗口标志的变化
def toggle_hide(self, state):
self.transparent_window.set_hide_lines(state == QtCore.Qt.Checked)
def closeEvent(self, event):
QtWidgets.QApplication.instance().quit()
def ask_user():
num_lines, okPressed = QtWidgets.QInputDialog.getInt(None, "输入线条数量", "你想要几条线?", 2, 1, 100, 1)
if not okPressed:
sys.exit()
# 直接设置默认值为32像素
distance_between_lines = 32
return num_lines, distance_between_lines
def main():
app = QtWidgets.QApplication(sys.argv)
num_lines, distance_between_lines = ask_user()
ex = TransparentWindow(num_lines, distance_between_lines)
control_panel = ControlPanel(ex)
sys.exit(app.exec_())
if __name__ == '__main__':
main()