1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# -*- coding: utf-8 -*-
#********************************************************************************
#Copyright © 2021 Wcq
#File Name: graphviz_preview.py
#Author: Wcq
#Email: wcq-062821@163.com
#Created: 2021-11-02 10:36:47
#Last Update: 2022-09-05 17:33:31
# By: Wcq
#Description:
#********************************************************************************
import os, time
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QLabel
from PyQt6 import QtCore
from PyQt6.QtGui import QIcon, QPixmap, QGuiApplication
import hashlib
class App(QWidget):
def __init__(self, src, jarFile, browser):
super().__init__()
self.left = 50
self.top = 50
self.width = 640
self.height = 480
self.srcFile = src
self.jarFile = jarFile
self.broswer = False if browser == 'nil' else True
print('src : ', src)
print('jarFile : ', jarFile)
print('self.broswer : ', self.broswer)
if self.srcFile.endswith('.dot'):
self.dstFile = self.srcFile[:-3] + 'png'
self.title = 'Graphviz Preview'
elif self.srcFile.endswith('.plantuml'):
self.dstFile = self.srcFile[:-8] + 'png'
self.title = 'PlantUML Preview'
else:
Usage()
print('self.dstFile : ', self.dstFile)
self.preMd5 = None
self.initUI()
self.initTimer()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
self.center()
self.label = QLabel(self)
def initTimer(self):
timer = QtCore.QTimer(self)
timer.timeout.connect(self.update_image)
timer.start(100) # 100ms 刷新一次
self.update_image()
def center(self):
screen = QGuiApplication.primaryScreen().availableVirtualGeometry()
size = self.geometry()
self.move((screen.width() - size.width()) // 2,
(screen.height() - size.height()) // 2)
def update_image(self):
md5 = hashlib.md5(open(self.srcFile, 'rb').read()).hexdigest()
if self.preMd5 != md5:
self.preMd5 = md5
# 文件有更新 重新生成 png 并显示
if self.srcFile.endswith('.dot'):
ret = os.system("dot -Tpng %s -o %s"%(self.srcFile, self.dstFile))
if self.broswer:
ret = os.system("dot -Tsvg %s -o %s"%(self.srcFile, self.dstFile))
elif self.srcFile.endswith('.plantuml'):
ret = os.system("java -jar %s -charset UTF-8 -tpng %s"%(self.jarFile, self.srcFile))
if self.broswer:
ret = os.system("java -jar %s -charset UTF-8 -tsvg %s"%(self.jarFile, self.srcFile))
else:
Usage()
if (ret == 0):
pixmap = QPixmap(self.dstFile)
if not pixmap.isNull():
self.label.setPixmap(pixmap)
self.label.adjustSize()
self.resize(pixmap.size())
else:
print('result : ', ret)
def Usage():
print('Usage: ')
print('python3 %s dot-src 0 0'%sys.argv[0])
print('Or python3 %s plantuml-src jar-file <nil/t>'%sys.argv[0])
exit(-1)
if __name__ == '__main__':
if len(sys.argv) != 4:
Usage()
app = QApplication(sys.argv)
ex = App(sys.argv[1], sys.argv[2], sys.argv[3])
ex.show()
sys.exit(app.exec())
|