Как включить возможность полноэкранного режима в PyQT5 (например для Youtube)
Я хочу от этого избавиться, как?
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.Qt import *
from PyQt5.QtCore import QProcess
import pyautogui as p
import locale
import inspect
import os
import sys
import time
import subprocess
import requests
lang = locale.getdefaultlocale()[0]
print(f'lang = {lang}') #
def get_script_dir(follow_symlinks=True):
if getattr(sys, 'frozen', False): # py2exe, PyInstaller, cx_Freeze
path = os.path.abspath(sys.executable)
else:
path = inspect.getabsfile(get_script_dir)
if follow_symlinks:
path = os.path.realpath(path)
return os.path.dirname(path)
script_dir = get_script_dir()
class Ui_tbWidget(object):
def setupUi(self, tbWidget):
tbWidget.setObjectName("tbWidget")
tbWidget.resize(600, 40)
sizePolicy = QtWidgets.QSizePolicy(
QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(tbWidget.sizePolicy().hasHeightForWidth())
tbWidget.setSizePolicy(sizePolicy)
tbWidget.setMinimumSize(QtCore.QSize(0, 40))
tbWidget.setMaximumSize(QtCore.QSize(16777215, 40))
self.verticalLayout = QtWidgets.QVBoxLayout(tbWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setSpacing(0)
self.verticalLayout.setObjectName("verticalLayout")
self.tbWidget_2 = QtWidgets.QWidget(tbWidget)
self.tbWidget_2.setMinimumSize(QtCore.QSize(0, 40))
self.tbWidget_2.setMaximumSize(QtCore.QSize(16777215, 40))
self.tbWidget_2.setStyleSheet("QWidget#tbWidget_2{\n"
" background-color: #000000;\n"
"}")
self.tbWidget_2.setObjectName("tbWidget_2")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.tbWidget_2)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setSpacing(0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.tbWidget_5 = QtWidgets.QWidget(self.tbWidget_2)
self.tbWidget_5.setMinimumSize(QtCore.QSize(0, 40))
self.tbWidget_5.setMaximumSize(QtCore.QSize(16777215, 40))
self.tbWidget_5.setObjectName("tbWidget_5")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.tbWidget_5)
self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_3.setSpacing(0)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.tbLabel_6 = QtWidgets.QLabel('MikoTube', self.tbWidget_5,
alignment=QtCore.Qt.AlignCenter)
self.tbLabel_6.setObjectName("tbLabel_6")
self.tbLabel_6.setStyleSheet(
"#tbLabel_6 {color: #FFFFFF; font-size: 22px; font-family: Montserrat}")
self.verticalLayout_3.addWidget(self.tbLabel_6)
self.horizontalLayout_2.addWidget(self.tbWidget_5)
self.tbWidget_3 = QtWidgets.QWidget(self.tbWidget_2)
self.tbWidget_3.setMinimumSize(QtCore.QSize(90, 40))
self.tbWidget_3.setMaximumSize(QtCore.QSize(90, 40))
self.tbWidget_3.setStyleSheet("QPushButton{\n"
" background-color:rgba(0, 0, 0, 0);\n"
" color:rgb(255, 255, 255);\n"
" border-radius:1px;\n"
" font-size:18px;\n"
# ----> " font-family:dripicons-v2;\n" # <---- убрал
"}\n"
"QPushButton:hover{\n"
" background-color:rgb(49, 48, 53);\n"
"}\n"
"QPushButton#closeButton:hover{\n"
" background-color:rgb(232, 17, 35);\n"
"}\n"
"QPushButton:pressed{\n"
" padding-top:5px;\n"
" padding-left:5px;\n"
"}")
self.tbWidget_3.setObjectName("tbWidget_3")
self.gridLayout = QtWidgets.QGridLayout(self.tbWidget_3)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setSpacing(0)
self.gridLayout.setObjectName("gridLayout")
self.closeButton = QtWidgets.QPushButton(self.tbWidget_3)
font = QtGui.QFont()
font.setFamily("Webdings")
self.closeButton.setFont(font)
self.closeButton.setMinimumSize(QtCore.QSize(30, 30))
self.closeButton.setMaximumSize(QtCore.QSize(30, 30))
self.closeButton.setObjectName("closeButton")
self.gridLayout.addWidget(self.closeButton, 0, 2, 1, 1)
self.buttonMaximum = QtWidgets.QPushButton(self.tbWidget_3)
self.buttonMaximum.setMinimumSize(QtCore.QSize(30, 30))
self.buttonMaximum.setMaximumSize(QtCore.QSize(30, 30))
font = QtGui.QFont()
font.setFamily("Webdings")
self.buttonMaximum.setFont(font)
self.buttonMaximum.setObjectName("buttonMaximum")
self.gridLayout.addWidget(self.buttonMaximum, 0, 1, 1, 1)
# !!! +++
self.buttonNormal = QtWidgets.QPushButton(self.tbWidget_3) # +++
self.buttonNormal.setMinimumSize(QtCore.QSize(30, 30))
self.buttonNormal.setMaximumSize(QtCore.QSize(30, 30))
font = QtGui.QFont()
font.setFamily("Webdings")
self.buttonNormal.setFont(font)
self.buttonNormal.setObjectName("buttonNormal")
self.gridLayout.addWidget(self.buttonNormal, 0, 1, 1, 1)
self.buttonMinimum = QtWidgets.QPushButton(self.tbWidget_3)
self.buttonMinimum.setMinimumSize(QtCore.QSize(30, 30))
self.buttonMinimum.setMaximumSize(QtCore.QSize(30, 30))
font = QtGui.QFont()
font.setFamily("Webdings")
self.buttonMinimum.setFont(font)
self.buttonMinimum.setObjectName("buttonMinimum") # buttonMinimum tbPushButton
self.gridLayout.addWidget(self.buttonMinimum, 0, 0, 1, 1)
self.horizontalLayout_2.addWidget(self.tbWidget_3)
self.verticalLayout.addWidget(self.tbWidget_2)
self.retranslateUi(tbWidget)
QtCore.QMetaObject.connectSlotsByName(tbWidget)
def retranslateUi(self, tbWidget):
_translate = QtCore.QCoreApplication.translate
tbWidget.setWindowTitle(_translate("tbWidget", "Form"))
self.buttonMinimum.setText(_translate("tbWidget", "0"))
self.closeButton.setText(_translate("tbWidget", "r"))
self.buttonMaximum.setText(_translate("tbWidget", "1"))
self.buttonNormal.setText(_translate("tbWidget", "2")) # +++
class TitleBar(QtWidgets.QWidget, Ui_tbWidget):
def __init__(self, parent=None):
super(TitleBar, self).__init__(parent)
self.setupUi(self)
self.buttonNormal.setVisible(False)
self.parent = parent # +++
self.buttonMinimum.setFocusPolicy(QtCore.Qt.NoFocus)
self.buttonMaximum.setFocusPolicy(QtCore.Qt.NoFocus)
self.buttonNormal.setFocusPolicy(QtCore.Qt.NoFocus)
self.closeButton.setFocusPolicy(QtCore.Qt.NoFocus)
self.buttonMinimum.clicked.connect(self.parent.showMinimized)
self.buttonMaximum.clicked.connect(self.parent.showMaximized)
self.buttonNormal.clicked.connect(self.parent.showNormal)
self.closeButton.clicked.connect(self.parent.close)
self.parent.installEventFilter(self)
def eventFilter(self, target, event):
if isinstance(event, QWindowStateChangeEvent):
if self.parent.isVisible() and not self.parent.isMinimized():
# Скрыть кнопку максимизации, если ток максимален
self.buttonMaximum.setVisible(not self.parent.isMaximized())
self.buttonNormal.setVisible(self.parent.isMaximized())
return super(TitleBar, self).eventFilter(target, event)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.centralwidget = QtWidgets.QWidget()
self.centralwidget.setObjectName("centralwidget")
self.setCentralWidget(self.centralwidget)
self.resize(1400, 900)
def _downloadRequested(item):
p.alert(f'Скачали что-то там {item.path()}',
'Запрошено скачивание', button='OK')
item.accept()
self.browser = QWebEngineView()
self.browser.page().profile().downloadRequested.connect(_downloadRequested)
self.browser.setUrl(QUrl("https://www.youtube.com/channel/UCuoYQKgS0_kebtTD-k1p3lQ"))
# self.height = self.screenRect.height()
# self.width = self.screenRect.width()
# востановите
self.setWindowFlags( # QtCore.Qt.WindowStaysOnTopHint |
QtCore.Qt.FramelessWindowHint)
self.setWindowIcon(QIcon('miko.png'))
# +++
self.titleBar = TitleBar(self)
layout = QtWidgets.QVBoxLayout(self.centralwidget)
layout.setContentsMargins(0, 0, 0, 0)
layout.setSpacing(0)
layout.addWidget(self.titleBar)
layout.addWidget(self.browser)
self.oldPos = self.pos()
# !!! +++
self.langs = ['ru_RU', 'uk_UK', 'be_BE', 'kz_KZ'] # !!! +++
def mousePressEvent(self, event):
self.oldPos = event.globalPos()
def mouseMoveEvent(self, event):
if event.pos().y() > 40:
return
delta = QPoint(event.globalPos() - self.oldPos)
self.move(self.x() + delta.x(), self.y() + delta.y())
self.oldPos = event.globalPos()
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_F7:
self.browser.setUrl(QUrl("https://www.youtube.com/channel/UCuoYQKgS0_kebtTD-k1p3lQ"))
elif event.key() == QtCore.Qt.Key_F1:
import webbrowser
webbrowser.open('https://www.youtube.com/channel/UCuoYQKgS0_kebtTD-k1p3lQ')
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec())
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.browser = QtWebEngineWidgets.QWebEngineView()
self.setCentralWidget(self.browser)
self.tbNavigate = QtWidgets.QToolBar(orientation=QtCore.Qt.Horizontal)
self.addToolBar(QtCore.Qt.TopToolBarArea, self.tbNavigate)
action_data = [
("Back", "next.svg", self.browser.back),
("Forward", "icone/next.png", self.browser.forward),
(
"Reload this page",
"icone/baseline_refresh_black_18dp.png",
self.browser.reload,
),
("Home", "icone/home (1).png", self.navigateHome),
]
for text, icon_path, slot in action_data:
icon = QtGui.QIcon()
icon.addPixmap(
QtGui.QPixmap(icon_path), QtGui.QIcon.Normal, QtGui.QIcon.Off
)
action = QtWidgets.QAction(text, icon=icon, triggered=slot, parent=self)
self.tbNavigate.addAction(action)
self.httpsicon = QtWidgets.QLabel()
self.tbNavigate.addWidget(self.httpsicon)
self.addressbar = QtWidgets.QLineEdit()
self.addressbar.returnPressed.connect(self.navigate_to_url)
self.tbNavigate.addWidget(self.addressbar)
self.browser.urlChanged.connect(self.update_urlBar)
self.browser.load(QtCore.QUrl("https://youtube.com"))
global_settings = QtWebEngineWidgets.QWebEngineSettings.globalSettings()
for attr in (
QtWebEngineWidgets.QWebEngineSettings.PluginsEnabled,
QtWebEngineWidgets.QWebEngineSettings.FullScreenSupportEnabled,
):
global_settings.setAttribute(attr, True)
self.browser.page().fullScreenRequested.connect(self.FullscreenRequest)
@QtCore.pyqtSlot()
def navigateHome(self):
self.browser.setUrl(QtCore.QUrl("https://www.youtube.com"))
@QtCore.pyqtSlot()
def navigate_to_url(self):
q = QtCore.QUrl(self.addressbar.text())
if not q.scheme():
q.setScheme("https")
self.browser.setUrl(q)
@QtCore.pyqtSlot(QtCore.QUrl)
def update_urlBar(self, url):
pixmap = (
QtGui.QPixmap("icone/ssl.png")
if url.scheme() == "https"
else QtGui.QPixmap("icone/lock.png")
)
self.httpsicon.setPixmap(pixmap)
self.addressbar.setText(url.toString())
self.addressbar.setCursorPosition(0)
@QtCore.pyqtSlot("QWebEngineFullScreenRequest")
def FullscreenRequest(self, request):
request.accept()
if request.toggleOn():
self.browser.setParent(None)
self.browser.showFullScreen()
else:
self.setCentralWidget(self.browser)
self.browser.showNormal()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())



