大家好,好久没有更新,希望不要把我忘了啊,前几天工作中遇到一个小困难,我想去取一个图片某个区域的色值需要用一下,但是真的不知用什么工具,然后把图片发给同事,用他电脑上的PS查看了一下,感觉工作中没有一些小工具真的是太烦了,大大降低了工作效率,于是周末闲来无事,想试试写一个小工具用用。
这是界面UI一个基于PYQT5的,网上看的时候,发现有些小伙伴做了Python版的取色器,不过UI是用的tkinter,因为没有用过它,而且个人觉得PYQT5更好用一些,下面一起来看看具体实现吧!
从其他小伙伴已经实现的代码上获得了一个实现思路:
1、创建两个窗口类,一个是主窗口,用于操作,显示色值,另一个用于显示整个屏幕上的东西。
2、在显示屏幕的窗口上获取要取像素值的位置。
主要的思路大致上就是这样了。(不知道有没有说清楚。。。。)
部分代码:
class Win_Main(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): label = QLabel("色值:", self) label.setStyleSheet("font-size:20px") label.move(0, 100) self.btn = QPushButton("取色", self) self.btn.move(200, 100) copy = QPushButton("复制", self) copy.move(280, 100) self.lineEdit = QLineEdit(self) self.lineEdit.setReadOnly(True) self.lineEdit.move(60, 102) copy.clicked.connect(lambda: pyperclip.copy(self.lineEdit.text().split(":")[1])) # self.setGeometry(300, 300, 500, 500) self.setWindowTitle('取色器')
这是主界面的布局(软件功能单一,随便放的位置)
class ShowScree(QWidget): point = pyqtSignal(int, int) def __init__(self, filename): super().__init__() self.initUI() self.fn = filename def initUI(self): # self.setGeometry(300, 300, 700, 700) self.setWindowTitle('Get sender') def mouseReleaseEvent(self, e): # 释放鼠标时发送信号(光标所在位置坐标) self.point.emit(e.x(), e.y()) os.remove(self.fn)
这是第二个窗口
下面是整个逻辑结构:
class Run: def __init__(self): self.app = QApplication(sys.argv) self.filename = 'temp.png' self.win_main = Win_Main() self.showscree = ShowScree(self.filename) self.win_main.show() self.win_main.btn.clicked.connect(self.get_scree) # self.b.mouseReleaseEvent.connect(self.bbb) sys.exit(self.app.exec_()) def get_scree(self): self.win_main.close() time.sleep(0.3) im = ImageGrab.grab() # 抓取当前屏幕的快照,返回一个模式为“RGB”的图像。 im.save(self.filename) # 将抓取到的整个屏幕的图片设置为显示出来 self.showscree.palette = QPalette() self.showscree.palette.setBrush(QPalette.Background, QBrush(QPixmap(self.filename))) self.showscree.setPalette(self.showscree.palette) self.showscree.showFullScreen() # self.b.show() self.showscree.point.connect(self.mouse_click) def mouse_click(self, x, y): self.win_main.show() self.showscree.close() self.get_color(x, y) def get_color(self, x, y): gdi32 = windll.gdi32 user32 = windll.user32 hdc = user32.GetDC(None) # 获取颜色值 pixel = gdi32.GetPixel(hdc, x, y) # 提取RGB值 r = pixel & 0x0000ff g = (pixel & 0x00ff00) >> 8 b = pixel >> 16 self.win_main.lineEdit.setText("RGB:{},{},{}".format(r, g, b)) return [r, g, b]
主界面
至此一个PYTHON 版的取色器就完成了,如果有不足之处,欢迎大家多多指点,多给建议,谢谢!如果有和我一样也是初学的同学需要参考,可以找我要源码哦!!!!