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