关于pyqt:使用-PyQt5-编写的色彩编辑器软件更新进度焰火十二卷-v2827

焰火十二卷是一款收费开源的调色板软件,它让你轻松从色轮或其余起源生成一组协调的色调,并且能够得心应手地调整色调的属性(如亮度、饱和度、对比度等)。你还能够把你的色调计划保留为色调组或色库,不便地与其余用户分享。你也能够把色调组或色库导出为独立的色调文档,或者导入到其余风行的图形软件中(如 Adobe Photoshop、GIMP、Krita、Pencil 2D 和优动漫 Paint 等),从而晋升你的工作效率和合作能力。焰火十二卷反对 Windows、Linux、macOS 等多种操作系统,让你能够在不同的设施上畅享创意。咱们在最新版本的焰火十二卷 v2.8.27 中减少了一些新性能,优化了用户体验和性能。 1、色调提醒标签新版焰火十二卷中增加了色调提醒点,依照提醒能够疾速增加、删除以及固定参考色调。 1.1、色轮视图中的提醒点色轮视图中的色调提醒点(如红色圆圈所示)。 1.2、图像视图中的提醒点图像视图中的色调提醒点(如红色圆圈所示)。 1.3、色板视图中的提醒点色板视图中的色调提醒点(如红色圆圈所示)。 2、界面主题有用户反馈黑白背景可能影响色调的判断,所以在新版焰火十二卷中我把默认的色调主题改为了彩色。当然,你还能够在设置对话框中抉择其余主题。此外,咱们也把界面显示的默认字体换成了霞鹜文楷。这是一款开源的中文字体,由 FONTWORKS 的 Klee One 字体衍生而来。 3、RGB 和 RYB 色调空间焰火十二卷新版本反对 RGB 和 RYB 两种色调空间。RYB 色调空间是一种以红、黄、蓝为三原色的色调模型,适宜颜料混合的色调表白。RYB 色调空间广泛应用于绘画、印刷和艺术设计等畛域,它能营造出丰盛的色调成果和对比度。在 RYB 色调空间中,红色和黄色混合出橙色,黄色和蓝色混合出绿色,蓝色和红色混合出紫色。当三原色混合时,会出现彩色或灰色。如果红色占比多,色彩就会偏暖;如果蓝色占比多,色彩就会偏冷。RYB 色调空间能够帮忙设计师抉择和搭配色彩,发明出好看和协调的视觉效果。用户能够在焰火十二卷中随时切换两种色调空间,实现更合乎感官的色调表白。新版本的焰火十二卷提供了 RGB 和 RYB 两种色调空间。RYB 色调空间是一种基于红、黄、蓝三原色的色调模型,实用于颜料混合的色调表白。RYB 色调空间罕用于绘画、印刷和艺术设计等畛域,它能够造成丰盛的色调成果和对比度。其中,红色和黄色混合会产生橙色,黄色和蓝色混合会产生绿色,蓝色和红色混合会产生紫色。当三种原色混合时,会产生彩色或灰色。如果红色占比拟高,那么色彩会偏差暖色调;如果蓝色占比拟高,那么色彩会偏差冷色调。RYB 色调空间能够帮忙设计师抉择和搭配色彩,发明出好看和协调的视觉效果。 另外,焰火十二卷还提供了增色模型的色轮。在这种色轮中,色轮的径向局部不是饱和度而是亮度。 4、更不便的快捷按钮新版焰火十二卷的操作窗口中内置了不同视图下的几种罕用的操作,晋升软件的应用体验。 5、试用新版焰火十二卷https://github.com/eigenmiao/Rickrack 原文首发于:https://www.bilibili.com/read/cv24730528

July 2, 2023 · 1 min · jiezi

关于pyqt:Y-分钟速成-PyQT

源代码下载: learnpyqt.py Qt 是一个用 C++ 实现的驰名跨平台软件开发框架。只需大量更改有时候甚至不须要更改代码就能在多个软硬件平台上运行,同时领有原生应用程序的性能和速度。 以下内容改编自 Aleksey Kholovchuk 编写的 C++ 版 QT 简介,并用 pyqt 重构原文代码,实现了局部雷同的性能。 import sysfrom PyQt4 import QtGui def window(): # 创立利用对象 app = QtGui.QApplication(sys.argv) # 创立一个 widget,作为 label 的父控件 w = QtGui.QWidget() # 在 widget 中增加一个 label 子控件 b = QtGui.QLabel(w) # 设置 label 的文字 b.setText("Hello World!") # 设置 widget 的尺寸和地位 w.setGeometry(100, 100, 200, 50) b.move(50, 20) # 设置窗口的题目 w.setWindowTitle("PyQt") # 显示 widget 及其所有子控件 w.show() # 上面让程序跑起来,这行代码会启动事件循环并阻塞直到应用程序退出。 sys.exit(app.exec_())if __name__ == '__main__': window()为了使用 pyqt 中一些更高级的性能,咱们须要开始学习应用其余控件。下文演示了如何弹出对话框,该对话框在用户确认操作或输出信息等状况下常常用到。 ...

December 19, 2022 · 1 min · jiezi

PyQt5-调研一

工具准备编辑器: vscode OR Pycharm vscode需要安装PYQT Integration 以及 Python 插件, Pycharm需要配置External Toolspycharm配置External Tools配置Qtdesigner.exeprogram选择Qtdesigner.exe的路径, Arguments: $FilePath$, work directory: $FileDir$配置PyUI, 将UI文件转换成Python文件program: python, Arguments: -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py, work direactory: $FileDir$布局绘制没有布局的控件不会随着窗口的改变而改变,关于布局,看这个Qt布局博客 第一个控件: tableViewself.sm = QtGui.QStandardItemModel() // 标准数据模型# 设置数据头栏名称self.sm.setHorizontalHeaderItem(0, QtGui.QStandardItem("Name"))self.sm.setHorizontalHeaderItem(1, QtGui.QStandardItem("NO."))# 设置数据条目self.sm.setItem(0, 0, QtGui.QStandardItem("张三"))self.sm.setItem(0, 1, QtGui.QStandardItem("20120202"))self.sm.setItem(1, 0, QtGui.QStandardItem("李四"))self.sm.setItem(1, 1, QtGui.QStandardItem("20120203000000000000000"))self.sm.setItem(2, 0, QtGui.QStandardItem("李四"))self.sm.setItem(2, 1, QtGui.QStandardItem("20120203000000000000000"))self.sm.setItem(3, 0, QtGui.QStandardItem("李四"))self.sm.setItem(3, 1, QtGui.QStandardItem("20120203000000000000000"))self.sm.setItem(4, 0, QtGui.QStandardItem("李四"))self.sm.setItem(4, 1, QtGui.QStandardItem("20120203000000000000000"))self.sm.setItem(5, 0, QtGui.QStandardItem("李四"))self.sm.setItem(5, 1, QtGui.QStandardItem("20120203000000000000000"))# 设置条目颜色和字体self.sm.item(0, 0).setForeground(QtGui.QBrush(QtGui.QColor(255, 0, 0)))self.sm.item(3, 1).setBackground(QtGui.QBrush(QtGui.QColor(255, 255, 0)))# 按照编号排序self.sm.sort(1, QtCore.Qt.DescendingOrder)# 将数据模型绑定到QTableViewself.tableView.setModel(self.sm)for c in range(self.tableView.horizontalHeader().count()): self.tableView.horizontalHeader().setSectionResizeMode(c) // 设置列宽自动填充·关于动态新增行:对model进行操作就行,tableView会感应到数据变化信号与槽知道vue,react的事件机制会对pyqt的信号与槽机制的理解提供方便。 ...

June 5, 2019 · 1 min · jiezi

PyQt5 内嵌浏览器注入 Javascript 脚本实现自动化操作

概要应同学邀请,演示如何使用 PyQt5 内嵌浏览器浏览网页,并注入 Javascript 脚本实现自动化操作。sg 原贴地址: 如何在Python利用runJavaScript模拟鼠标移动页面的某个元素https://segmentfault.com/q/10…下面测试的是一个廉价机票预订网站(http://www.flyscoot.com/),关键点如下使用 QWebEngineView 加载网页,并显示进度。在默认配置(QWebEngineProfile)中植入 Javascript 内容,这样脚本会在所有打开的网页中执行,不论跳转到哪个网址。Javascript 脚本使用网址中的路径名,判断当前网页位置,从而决定执行哪种操作。python 代码示例#!/usr/bin/env python3# -- coding: utf-8 --‘‘‘使用 PyQt5 内嵌浏览器浏览网页,并注入 Javascript 脚本实现自动化操作。‘‘‘import osimport sysfrom datetime import datetimefrom PyQt5.QtWidgets import ( QWidget, QApplication, QVBoxLayout, QHBoxLayout, QDesktopWidget, QTextEdit, QLabel, QLineEdit, QPushButton, QFileDialog, QProgressBar,)from PyQt5.QtCore import QUrl, pyqtSlotfrom PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEngineProfile, QWebEngineScript, QWebEnginePageclass Browser(QWidget): def init(self): super().init() self.init_ui() # 脚本 self.profile = QWebEngineProfile.defaultProfile() self.script = QWebEngineScript() self.prepare_script() def init_ui(self): self.webView = QWebEngineView() self.logEdit = QTextEdit() self.logEdit.setFixedHeight(100) self.addrEdit = QLineEdit() self.addrEdit.returnPressed.connect(self.load_url) self.webView.urlChanged.connect( lambda i: self.addrEdit.setText(i.toDisplayString())) self.jsEdit = QLineEdit() self.jsEdit.setText(‘inject.js’) loadUrlBtn = QPushButton(‘加载’) loadUrlBtn.clicked.connect(self.load_url) chooseJsBtn = QPushButton(‘选择脚本文件’) chooseJsBtn.clicked.connect(self.choose_js_file) # 导航/工具 top = QWidget() top.setFixedHeight(80) topBox = QVBoxLayout(top) topBox.setSpacing(0) topBox.setContentsMargins(5, 0, 0, 5) progBar = QProgressBar() progBox = QHBoxLayout() progBox.addWidget(progBar) topBox.addLayout(progBox) naviBox = QHBoxLayout() naviBox.addWidget(QLabel(‘网址’)) naviBox.addWidget(self.addrEdit) naviBox.addWidget(loadUrlBtn) topBox.addLayout(naviBox) naviBox = QHBoxLayout() naviBox.addWidget(QLabel(‘注入脚本文件’)) naviBox.addWidget(self.jsEdit) naviBox.addWidget(chooseJsBtn) topBox.addLayout(naviBox) self.webView.loadProgress.connect(progBar.setValue) # 主界面 layout = QVBoxLayout(self) layout.addWidget(self.webView) layout.addWidget(top) layout.addWidget(self.logEdit) self.show() self.resize(1024, 900) self.center() def center(self): qr = self.frameGeometry() cp = QDesktopWidget().availableGeometry().center() qr.moveCenter(cp) self.move(qr.topLeft()) @pyqtSlot() def load_url(self): url = self.addrEdit.text().strip() if not url.lower().startswith(‘http://’) and not url.lower().startswith(‘https://’): url = ‘http://{}’.format(url) self.load(url) @pyqtSlot() def choose_js_file(self): f, _ = QFileDialog.getOpenFileName(filter=“Javascript files(*.js)”) if os.path.isfile(f): self.jsEdit.setText(f) self.prepare_script() def prepare_script(self): path = self.jsEdit.text().strip() if not os.path.isfile(path): self.log(‘invalid js path’) return self.profile.scripts().remove(self.script) with open(path, ‘r’) as f: self.script.setSourceCode(f.read()) self.profile.scripts().insert(self.script) self.log(‘injected js ready’) def log(self, msg, *args, **kwargs): m = msg.format(*args, **kwargs) self.logEdit.append(’{} {}’.format( datetime.now().strftime(’%H:%M:%S’), m)) def load(self, url): self.log(f’loading {url}’) self.addrEdit.setText(url) self.webView.load(QUrl(url))if name == ‘main’: app = QApplication(sys.argv) b = Browser() b.load(‘http://www.flyscoot.com/') sys.exit(app.exec_())Javascript 脚本示例// 简单起见,这里只演示部分页面,脚本内容摘自 Heng丶原贴文。function handle(path) { // 首页 if (path == ‘/zh’) { document.getElementsByClassName(‘radio-inline’)[1].click(); document.getElementById(‘oneway_from’).value=‘广州 (CAN)’; document.getElementById(‘oneway_to’).value=‘新加坡 (SIN)’; document.getElementById(‘oneway_departuredate’).value=‘2018年9月10日’; document.getElementsByClassName(‘btn–booking’)[1].click(); return; } // 选择航班 if (path == ‘/Book/Flight’) { document.getElementsByClassName(‘price–sale’)[0].click(); document.getElementsByClassName(‘heading-4’)[0].click(); document.getElementsByClassName(‘btn-submit’)[0].click(); return; } // 乘客信息 if (path == ‘/BookFlight/Passengers’) { document.getElementsByClassName(‘fname1’)[0].value = “匿名”; }}let host = document.location.hostname;if (host.endsWith(’.flyscoot.com’)) { handle(document.location.pathname);} ...

September 1, 2018 · 2 min · jiezi