比较复杂的流程各种if判断和循环太多看起来不方便的解决办法
评论
收藏

比较复杂的流程各种if判断和循环太多看起来不方便的解决办法

经验分享
f
fengcai
2023-12-08 19:58·浏览量:582
f
fengcai
发布于 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/simple

 4.安装后在电脑桌面新建一个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()


收藏2
全部评论1
最新
发布评论
评论