MINGW-packages icon indicating copy to clipboard operation
MINGW-packages copied to clipboard

msys2 PyQtWebEngine

Open el07694 opened this issue 4 years ago • 17 comments

I am trying to install PyQtWebEngine. How can i do that?

Thanks in advance, Chris Pappas

el07694 avatar Apr 21 '21 11:04 el07694

Qtwebengine itself doesn't build on Mingw, so you won't be able to install it via msys2's mingw packages, at best you'd be able to install the Python bindings for qtwebkit. It's primarily a build issue for webengine, ergo the chromium engine to build on Mingw that I'm aware of.

ZachBacon avatar Apr 21 '21 11:04 ZachBacon

Was there any previous attempt to build it?

Biswa96 avatar Apr 21 '21 12:04 Biswa96

Was there any previous attempt to build it?

I think so, but that was years ago, not so sure about now though.

ZachBacon avatar Apr 21 '21 13:04 ZachBacon

However I think it's hard coded build scripts still says mingw is not supported

ZachBacon avatar Apr 21 '21 13:04 ZachBacon

https://packages.msys2.org/package/mingw-w64-x86_64-qtwebkit

that's all i need (

and works as expected!!!

el07694 avatar Apr 21 '21 13:04 el07694

Any updates? I want to display a page with RTCPeerConnection (which is not available in QtWebKit).

el07694 avatar Nov 19 '21 11:11 el07694

@el07694 no one working on porting QWebEngine for Mingw

Alexpux avatar Nov 19 '21 12:11 Alexpux

Is there any alternative? (like sellenium, geckodriver) ?

el07694 avatar Nov 19 '21 15:11 el07694

From qt wiki

The following packages are required to install Qt WebEngine:

sudo apt-get install libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libxtst-dev libxss-dev libdbus-1-dev libevent-dev libfontconfig1-dev libcap-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libegl1-mesa-dev gperf bison nodejs

The libevent package is ready: https://packages.msys2.org/search?t=pkg&q=libevent . The gperf package is ready: https://packages.msys2.org/search?t=pkg&q=gperf . The bison package is ready: https://packages.msys2.org/search?t=pkg&q=bison .

All the other packages have to be prepared...

el07694 avatar Nov 20 '21 17:11 el07694

@el07694 stop spamming. Problem is not in dependencies (most deps that you write is Linux only). Problem in building QWebEngine itself. You can try to do it yourself before posting here

Alexpux avatar Nov 20 '21 17:11 Alexpux

Yes and no, you only need the x development headers if you're compiling a native Linux app. Same with a few of the other dependencies. Currently the issue with qtwebengine is that right now it checks for a specific clang environment, and I mean one that's found in visual studio, not the mingw one. And that's just only the beginning.

ZachBacon avatar Nov 20 '21 17:11 ZachBacon

I make an alternative choice using selenium as internal pyqt5 application.

Code:

import win32gui
import win32con
import winxpgui
import win32api
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time
import ctypes
user32 = ctypes.windll.user32
width,height = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        #self.verticalLayout.addWidget(self.frame)
        MainWindow.setCentralWidget(self.centralwidget)
        
        
        self.chrome_options = Options()
        self.chrome_options.add_argument("disable-infobars")
        #self.chrome_options.add_argument("--window-size=0,0")
        self.chrome_options.add_argument("--kiosk")
        self.chrome_options.add_argument("--window-size="+str(int(2*width))+","+str(int(2*height)))
        self.chrome_options.add_argument("--window-position=-10,-10")
        self.chrome_options.add_argument("--app=http://www.in.gr/"); 
        self.s=Service(ChromeDriverManager().install())
        
        self.driver = webdriver.Chrome(service=self.s,options=self.chrome_options,service_log_path='NUL')
        self.driver.get("http://www.in.gr")
        time.sleep(0.5)
        

        self.hwnd = 0
        self.tries = 30
        self.total_tries = 0
        while(self.hwnd==0 and self.total_tries<=self.tries):
            try:
                win32gui.EnumWindows(self.hwnd_method, None)
                #win32gui.SetWindowLong (self.hwnd, win32con.GWL_EXSTYLE, win32gui.GetWindowLong (self.hwnd, win32con.GWL_EXSTYLE ) | win32con.WS_EX_LAYERED )
                #winxpgui.SetLayeredWindowAttributes(self.hwnd, win32api.RGB(0,0,0), 255, win32con.LWA_ALPHA)
                self.embed_window = QtGui.QWindow.fromWinId(self.hwnd)
                self.embed_widget = QtWidgets.QWidget.createWindowContainer(self.embed_window)
                self.verticalLayout.addWidget(self.embed_widget)        
                #self.driver.execute_script("document.documentElement.requestFullscreen();")
                self.tries+= 1
                break
                time.sleep(1)
            except Exception as e:
                print(e)
                self.tries += 1
                
                
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        
            
    def hwnd_method(self, hwnd, ctx):
        window_title = win32gui.GetWindowText(hwnd)
        if "in.gr" in window_title.lower():
            self.hwnd = hwnd
            '''        
            old_style = win32gui.GetWindowLong(hwnd, -16)
            # building the new style(old style AND NOT Maximize AND NOT Minimize)
            new_style = old_style & ~win32con.WS_MAXIMIZEBOX & ~win32con.WS_MINIMIZEBOX
            # setting new style
            win32gui.SetWindowLong(hwnd, -16, new_style)
            # updating non - client area
            win32gui.SetWindowPos(hwnd, 0, 0, 0, 0, 0, win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_NOZORDER | win32con.SWP_FRAMECHANGED)
            win32gui.UpdateWindow(hwnd)
            '''
            #win32gui.ShowWindow(hwnd , win32con.SW_HIDE)
            
            #win32gui.SetWindowLong (hwnd, win32con.GWL_EXSTYLE, win32gui.GetWindowLong (hwnd, win32con.GWL_EXSTYLE ) | win32con.WS_EX_LAYERED )
            #winxpgui.SetLayeredWindowAttributes(hwnd, win32api.RGB(0,0,0), 0, win32con.LWA_ALPHA)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())```

el07694 avatar Nov 23 '21 16:11 el07694

It is needed to use emacs-application-frame with mingw x64 emacs.

kimim avatar Apr 26 '23 12:04 kimim

And yet can't be provided as currently qtwebengine is only compilable on msvc not mingw-w64 yet

ZachBacon avatar Apr 26 '23 12:04 ZachBacon

And yet can't be provided as currently qtwebengine is only compilable on msvc not mingw-w64 yet

noo propietary compiler :(

Kreijstal avatar Aug 09 '24 14:08 Kreijstal

Anyway i am trying to switch off python/pyqt5 an use C++/Qt/Qtcreator/cmake instead

el07694 avatar Aug 12 '24 12:08 el07694

@el07694 no one working on porting QWebEngine for Mingw

In progress: https://github.com/msys2/MINGW-packages/pull/21914

realysy avatar Oct 06 '24 14:10 realysy