Python 3.6 PYQT 5.12.1
我准备用pyqt5展示我需要的风格,我知道pyqt5中的QTextEdit可以很好的展示html代码(我有一些web开发经验),所以我决定用html/css来展示我的风格。但是,在显示 css 中的代码时可能会出现一些问题。我该怎么做才能让它显示 css/javascript ?如果不行,能否推荐其他修改样式的方法?
当我在html而不是css中编码时,它可以显示像
width = "100" height = "100"
这样的样式,有些不能显示像border-radius:50%;
。当我在 css 中编写样式时,它不会产生任何效果。顺便说一下,我导入了 CSS 代码。
CSS 代码在 QTextEdit 中什么都不做(但在 html 中没问题)
.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class WINDOW(QMainWindow):
def __init__(self):
super().__init__()
self.init()
def init(self):
w_width,w_height,w_x,w_y = 700,640,700,200
self.set_size_pos(w_width,w_height,w_x,w_y);
self.set_message_textedit()
self.message_textedit.setHtml(self.get_html())
self.show()
def set_size_pos(self,width,height,x,y):
'''
set window's width , height and position
'''
self.resize(width,height)
self.move(x,y)
def set_message_textedit(self):
self.message_textedit = QTextEdit(self)
self.message_textedit.setFont(QFont("Microsoft YaHei",12))
self.message_textedit.resize(680,420)
self.message_textedit.move(10,50)
self.message_textedit.setReadOnly(True)
def get_html(self):
html = ""
with open("./chat-style/chat.html","r",encoding = "utf-8") as f:
html = f.read()
return html
if __name__ == '__main__':
app = QApplication(sys.argv)
test = WINDOW()
sys.exit(app.exec_())
.html
<!doctype html>
<html lange="zh-CN">
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="./chat.css">
<script src = "chat.js"></script>
</head>
<body>
<img class = "tx" src="E:\study\assiataant\picture\icon.jpg">
<div>Welcome ~ Don!</div>
</body>
</html>
.css
.tx
{
border-radius:50%;
width: 30;
height: 30;
}
QTextEdit 仅支持 CSS 2.1,如文档所示:
支持所有 CSS 2.1 选择器类,伪类选择器除外,例如:first-child、:visited 和 :hover。
但是
border-radius
是在CSS3中引入的。所以你不能不幸地使用它。我建议您阅读以下链接,以便了解允许的标签。
另一种选择是使用支持这些标签的 QWebEngineView:
*.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import os
import sys
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
view = QtWebEngineWidgets.QWebEngineView()
file = os.path.join(
os.path.dirname(os.path.realpath(__file__)),
"chat-style/chat.html"
)
view.load(QtCore.QUrl.fromLocalFile(file))
self.setCentralWidget(view)
self.resize(640, 480)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
如果您没有安装QWebEngineView,您必须使用以下命令安装它:
python -m pip install PyQtWebEngine