PyQt5 在浏览器页面上添加文本
PyQt5 add text over browser page
我想做一个简单的浏览器,但有一个区域(标签),我在一个角落里显示时间和日期在实际加载的网页上。
我目前在状态栏中显示文本,但我更愿意去掉它,让文本在浏览器中持续显示。
这是我的代码,运行良好,我只是不知道如何在当前显示的 browser/page 之上永久添加文本。见附图:
class WebEnginePage(QWebEnginePage):
def createWindow(self, _type):
page = WebEnginePage(self)
page.urlChanged.connect(self.on_url_changed)
return page
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.browser = QWebEngineView()
self.browser.setContextMenuPolicy(Qt.PreventContextMenu)
page = WebEnginePage(self.browser)
self.browser.setPage(page)
self.setCentralWidget(self.browser)
self.showMaximized()
self.date = QDate.currentDate()
self.browser.load(QUrl("http://whosebug.com"))
timer = QTimer(self)
timer.timeout.connect(self.showTime)
timer.start(100)
font = QFont('Arial', 16, QFont.Bold)
self.statusBar().setFont(font)
self.show()
def showTime(self):
current_time = QTime.currentTime()
label_time = current_time.toString('hh:mm')
self.statusBar().showMessage('Time: ' + label_time + ' || Date: ' + self.date.toString('dd.MM.yyyy'))
def main():
app = QApplication(sys.argv)
QApplication.setApplicationName('TEST')
window = MainWindow()
app.exec_()
if __name__ == '__main__':
sys.exit(main())
如果您想在 QWebEngineView 上放置一个小部件,那么一个可能的解决方案是使它成为 window 的子对象并使用 raise 使其位于顶部:
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.browser = QWebEngineView()
self.browser.setContextMenuPolicy(Qt.PreventContextMenu)
page = WebEnginePage(self.browser)
self.browser.setPage(page)
self.setCentralWidget(self.browser)
self.showMaximized()
self.browser.load(QUrl("http://whosebug.com"))
timer = QTimer(self)
timer.timeout.connect(self.showTime)
timer.start(100)
self.label = QLabel(self)
self.label.setStyleSheet("QLabel {color : black; }")
self.label.move(10, 10)
self.label.show()
self.label.raise_()
font = QFont("Arial", 16, QFont.Bold)
self.label.setFont(font)
self.show()
def showTime(self):
self.label.setText(
"Time: "
+ QTime.currentTime().toString("hh:mm")
+ " || Date: "
+ QDate.currentDate().toString("dd.MM.yyyy")
)
self.label.adjustSize()
我想做一个简单的浏览器,但有一个区域(标签),我在一个角落里显示时间和日期在实际加载的网页上。
我目前在状态栏中显示文本,但我更愿意去掉它,让文本在浏览器中持续显示。
这是我的代码,运行良好,我只是不知道如何在当前显示的 browser/page 之上永久添加文本。见附图:
class WebEnginePage(QWebEnginePage):
def createWindow(self, _type):
page = WebEnginePage(self)
page.urlChanged.connect(self.on_url_changed)
return page
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.browser = QWebEngineView()
self.browser.setContextMenuPolicy(Qt.PreventContextMenu)
page = WebEnginePage(self.browser)
self.browser.setPage(page)
self.setCentralWidget(self.browser)
self.showMaximized()
self.date = QDate.currentDate()
self.browser.load(QUrl("http://whosebug.com"))
timer = QTimer(self)
timer.timeout.connect(self.showTime)
timer.start(100)
font = QFont('Arial', 16, QFont.Bold)
self.statusBar().setFont(font)
self.show()
def showTime(self):
current_time = QTime.currentTime()
label_time = current_time.toString('hh:mm')
self.statusBar().showMessage('Time: ' + label_time + ' || Date: ' + self.date.toString('dd.MM.yyyy'))
def main():
app = QApplication(sys.argv)
QApplication.setApplicationName('TEST')
window = MainWindow()
app.exec_()
if __name__ == '__main__':
sys.exit(main())
如果您想在 QWebEngineView 上放置一个小部件,那么一个可能的解决方案是使它成为 window 的子对象并使用 raise 使其位于顶部:
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.browser = QWebEngineView()
self.browser.setContextMenuPolicy(Qt.PreventContextMenu)
page = WebEnginePage(self.browser)
self.browser.setPage(page)
self.setCentralWidget(self.browser)
self.showMaximized()
self.browser.load(QUrl("http://whosebug.com"))
timer = QTimer(self)
timer.timeout.connect(self.showTime)
timer.start(100)
self.label = QLabel(self)
self.label.setStyleSheet("QLabel {color : black; }")
self.label.move(10, 10)
self.label.show()
self.label.raise_()
font = QFont("Arial", 16, QFont.Bold)
self.label.setFont(font)
self.show()
def showTime(self):
self.label.setText(
"Time: "
+ QTime.currentTime().toString("hh:mm")
+ " || Date: "
+ QDate.currentDate().toString("dd.MM.yyyy")
)
self.label.adjustSize()