Pyslvs 開發進度:

  • 嵌入 Console 窗格
  • 顏色預覽
  • 載入後資訊提示
  • XML 支援滑鼠拖入開啟

Pyslvs 開發進度

嵌入 Console 窗格

將原本顯示在終端機的 Log 資訊都搬到 GUI 中,這樣 Windows 包裝時可以選擇不要顯示文字提示(但是會失去 Help 功能)。

不過主要目的是複製輸出文字會比較快速,不用切換到 Command line 或 Console。

要在 Qt 中將 stdout、stderr 或 logging 輸出到 QTextBrowser 上,可以撰寫以下檔案:

# -*- coding: utf-8 -*-
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys, logging

class QtHandler(logging.Handler):
    def __init__(self):
        logging.Handler.__init__(self)
    def emit(self, record):
        record = self.format(record)
        if record: XStream.stdout().write('{}\n'.format(record))

logger = logging.getLogger(__name__)
handler = QtHandler()
handler.setFormatter(logging.Formatter("%(asctime)s | %(message)s"))
logger.addHandler(handler)

class XStream(QObject):
    _stdout = None
    _stderr = None
    messageWritten = pyqtSignal(str)
    def flush(self): pass
    def fileno(self): return -1
    def write(self, msg):
        if not self.signalsBlocked(): self.messageWritten.emit(msg)
    @staticmethod
    def stdout():
        if not XStream._stdout:
            XStream._stdout = XStream()
            sys.stdout = XStream._stdout
        return XStream._stdout
    @staticmethod
    def stderr():
        if not XStream._stderr:
            XStream._stderr = XStream()
            sys.stderr = XStream._stderr
        return XStream._stderr

設一個方法讓 QTextBrowser 接收訊息並顯示,每次更新先捲到最尾端,插入文字後再捲到底一次。

接著,在 QTextBrowser 的視窗中為其連接信號槽:

#In the window
XStream.stdout().messageWritten.connect(self.appendToConsole)
XStream.stderr().messageWritten.connect(self.appendToConsole)

@pyqtSlot(str)
def appendToConsole(self, log):
    self.consoleWidgetBrowser.moveCursor(QTextCursor.End)
    self.consoleWidgetBrowser.insertPlainText(log)
    self.consoleWidgetBrowser.moveCursor(QTextCursor.End)

顏色預覽

在 graphics.color 檔案中新增了新的字典,可以回傳一個 20x20 對應顏色的 QIcon 方塊,用於預覽正確顯示的色調。

def colorIcons():
    colors = colorlist()
    for name, color in colors.items():
        colorBlock = QPixmap(QSize(*([20]*2)))
        colorBlock.fill(color)
        colors.update({name:QIcon(colorBlock)})
    return colors

在 Windows 顯示的效果如下:

載入後資訊提示

由於演算法的解因為技術問題,先不做復原重作的選項。

檔案資訊對話方塊會顯示演算法的解。

另外以往錯誤訊息顯示在 log 裡,現在首次載入完畢後會顯示檔案狀態(之後編輯將不再顯示錯誤資訊)。

XML 支援滑鼠拖入開啟

將過濾器增加 xml 的格式。


Comments

comments powered by Disqus