PyCharm Support for PyQt6 on M1 - python

I've now swapped over to Pycharm and PyQt5 as it had better support an integration.
Our school has just upgraded to M1 chips and now my solution doesn't work.
I can download the latest version of python 3.10.2.
I then run the following command in terminal.
Python3.10.2 -m pip install PyQt6
To test the code I then type this into idle:
import sys
from PyQt6 import QtWidgets
app = QtWidgets.QApplication(sys.argv)
widget = QtWidgets.QWidget()
widget.resize(400, 200)
widget.setWindowTitle("This is PyQt Widget example")
widget.show()
exit(app.exec())
This all works perfectly and a window will be displayed.
I then open up Pycharm 2021.3 community edition.
Select the same interpreter and load global dependencies.
I run it and then this is the error I get
From what I can read PyQt6 supports both the Arm and 86 architecture from the same download source. Is it possible to force an interpreter to use just the arm or does PyCharm know to do this intuitively?
I'm trying to get students to use the drop and drag builder with QT designer first.

Related

PyQtWebEngine dont't show nothing

I'm trying to create a mini web browser, but I'm having some problems with PyQtWebEngine. When I run the code the window appear but It's blank, that window don't show me the page (In this case of test I'm trying to connect with Google).
I've already tried to reinstall PyQt5, PyQtWebEngine and I've already create a Virtual Enviroment with venv (as I see here) but seems that nothing could fix it.
I run the code with debug mode with F5 and run using QT_DEBUG_PLUGINS=1 but they show me no errors.
This is the code (I'm just following this example)
import sys
from PyQt5.QtCore import *
from PyQt5.QtWebEngineWidgets import *
from PyQt5.QtWidgets import QApplication
app = QApplication(sys.argv)
web = QWebEngineView()
web.load(QUrl('https://google.it/'))
web.show()
sys.exit(app.exec_())
And this is the window when I run the code
I'm editing this code with Microsoft Visual Code, running on Ubuntu 22.04.1.
I got the same problem with your code on Linux Mint 21 (based on Ubuntu 22.04).
Even other examples from tutorials had the same problem.
this answer helped me to resolve this problem. I describe it with more details.
I got all installed modules for PyQt5
pip3 freeze | grep -i pyqt
PyQt5==5.15.7
PyQt5-Qt5==5.15.2
PyQt5-sip==12.11.0
PyQtWebEngine==5.15.6
PyQtWebEngine-Qt5==5.15.2
and I unistalled all of them
pip3 uninstall PyQt5 PyQt5-Qt5 PyQt5-sip PyQtWebEngine PyQtWebEngine-Qt5
And later I installed QtWebEngine using apt
(apt automatically installed also PyQt5 and I didn't need to use pip for this)
apt install python3-pyqt5.qtwebengine
It installed also other C/C++ libraries - and maybe this was needed to work corrrectly.
The following additional packages will be installed:
libqt5designer5 libqt5qml5 libqt5qmlmodels5 libqt5quick5 libqt5quickwidgets5 libqt5test5 libqt5webchannel5
libqt5webengine-data libqt5webengine5 libqt5webenginecore5 libqt5webenginewidgets5 libre2-9 python3-pyqt5
python3-pyqt5.qtwebchannel python3-pyqt5.sip
And now pip3 freeze shows me:
PyQt5==5.15.6
PyQt5-sip==12.9.1
PyQtWebEngine==5.15.5
And now your code works for me.
Similar questions:
python - Unable to render webpage using QWebEngineView - Stack Overflow
python 3.x - PyQt5 QWebEngineView does not show webpage - Stack Overflow
python - Displaying web page with PyQt5 WebEngine - Stack Overflow

ModuleNotFoundError: No module named 'QWebEngineView'

I have been using the QT designer tool which saves GUIs as a XML template. PySide2 is able to covert this to a Python Class file.
Utilizing the tool for an XML that includes QWebEngineView
pyside2-uic GUI_NEW.ui > ui_main.py
The first few lines of the ui_main.py call for
################################################################################
## Created by: Qt User Interface Compiler version 5.15.2
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
from QWebEngineView import QWebEngineView
running the file that utilizes this, results in:
ModuleNotFoundError: No module named 'QWebEngineView'
So far I have tried
Trying PySide6 over PySide 2
Replaced the import line with
from PySide2.QtWebEngineWidgets import QWebEngineView
The Application runs but completely hangs
pip install PyQtWebEngine
pip install PyQt5==5.11.3
Cleaning up, installing all references to Qt (Pyside, PyQT, etc), and re-installing
Attempted all the above on python 3.6 - 3.8
Here is another option, you don't have it.
Then try this option:
from PyQt5 import QtWebEngineWidgets
That is, an example of a string:
self.webView = QtWebEngineWidgets.QWebEngineView(self.centralwidget)
But, unfortunately Qt, PyQt and PySide should never be used together. Most problems occur when trying to re-display a widget created with a binding with another one created with a different binding.
The solution is simple: you either use PyQt5 and use QtWebEngineWidgets, or PySide2.
As a last resort, try installing a newer version (5.12)(PyQt5) and install PyQtWebEngine separately.
Ultimately I stuck to PySide2 (option 2), creating a new project specific python environment that did not involve PyQt5. This prevented the application from hanging with zero console errors.

PyQt5 Installation

I am new to the world of python and I was hoping you could help with my PyQt5 installation troubles.
I have downloaded PyQt5 (zip folder) for Windows and extracted onto my desktop.
Source: https://www.riverbankcomputing.com/software/pyqt/download5
As instructed in the read me file, I have also installed the latest SIP package (also extracted to the desktop) and I have run the configure.py in python 3.5 to receive the following error:
Error: Use the --qmake argument to explicitly specify a working Qt qmake.
Does anyone know why this may be? Or how I fix it and complete the install?
Additionally, I have watched a tutorial on YouTube... https://www.youtube.com/watch?v=JBME1ZyHiP8
However when trying to run his code (shown below) I get the:
'ImportError: No module named 'PyQt5'
Is this linked to the install issues?
Code:
import sys
from PyQt5 import QtGui
app = QtGui.QApplication (sys.argv)
window = QtGui.Qwidget()
window.setGeometry (50, 50, 800, 500)
window.setWindowTitle("GIS Demonstration")
window.show()
Am I missing something? All solutions welcome.
Thanks,
Jodie
I install it with the cmd (shell):
pip install pyqt5
this works for my

PyQT5 QSystemTrayIcon activated signal not working

I am trying to print a text when system tray icon is clicked in PyQT5 program. I tried to connect PyQT5 QSystemTrayIcon activated signal (emitted when system tray icon is clicked) to custom method, but the method is not called.
Here is simple example:
import sys
from PyQt5.QtWidgets import QSystemTrayIcon, QApplication
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
#pyqtSlot()
def action(signal):
print('test1')
app = QApplication(sys.argv)
icon = QSystemTrayIcon(QIcon('any_icon.png'), app)
icon.show()
icon.activated.connect(action)
#icon.activated['QSystemTrayIcon::ActivationReason'].connect(action)
#icon.pyqtConfigure(activated=action)
print(icon.receivers(icon.activated)) # to check if is connected
sys.exit(app.exec_())
In example are 3 ways of connecting the signal to slot (two of them commented). I tried both using method with and without decorator #pyqtSlot(). Connection raises no errors. Even the print of signal receivers says it is connected to 1 slot. However, it does nothing when systray icon is clicked.
The question: Is the signal connection incorrect, or is the signal not emitted at all?
System: Ubuntu 16.04, PyQT5.8. However, should be working on others systems too as PyQT is multiplatform-ish.
PS: I have read official PyQT5 signal/slot documentation and many related questions on stack overflow, but had not found the same issue. The closest one I think may relate is in C++, but not applicable to python.
Any tips would be really appreciated. Thank you very much!
Edit: fixed typos in text
Your example works just fine in Xubuntu under openbox with stalonetray.
However in Xubuntu proper it did not work !
But when I added something like:
mNu = QMenu()
test = QAction('Test',mNu)
test.triggered.connect(action)
icon.setContextMenu(mNu)
it worked in xubuntu. I seems that somehow Ubuntu only expects to show a menu in the tray thing.
Based on #Murdo and #eyllanesc answers, I tested the sample code on multiple systems.
Clean install only with Python 3.5 and pip3 install pyqt5. System tray icon activated signal is:
Not working:
Ubuntu 16.04 - Unity, PyQt 5.8 and PyQt 5.5.1
Ubuntu 16.10 - Unity, PyQt 5.8 and PyQt 5.7
Working:
Ubuntu 16.04 - Gnome, PyQt 5.8
Arch Linux - Gnome, PyQt 5.8
Kubuntu 16.10, KDE, PyQt 5.7
Xubuntu - Openbox with Stalonetray
It seems like the sample code is correct and there is a bug in QT using Unity - QSystemTrayIcon does not send activated signal when the system tray icon is clicked. Bug report link.
SOLUTION QSystemTrayIcon activation (clicked) signal can be bypassed by assigning a QMenu to the system tray icon and detecting QMenu().aboutToShow signal instead. This way when the tray icon is clicked, signal aboutToShow is sent, then menu displayed. It is not exactly the same result, but there seems to be no other way of detecting system tray icon activation on Unity. Thanks to #Murdo for an idea. Simple code example:
import sys
from PyQt5.QtWidgets import QApplication, QSystemTrayIcon, QMenu
from PyQt5.QtGui import QIcon
def action():
print('System tray icon clicked.')
app = QApplication(sys.argv)
icon = QSystemTrayIcon(QIcon('any_icon.png'), parent=app)
icon.show()
menu = QMenu(parent=None)
menu.aboutToShow.connect(action)
icon.setContextMenu(menu)
sys.exit(app.exec_())

No autocomplete for PyQt4 in PyCharm

On my office PC I'm using
Python 3.4
PyQt4 Version 4.11.1
PyCharm Community Eddition 3.4.1
I installed everything in the order as stated above.
However, code completion does not work. It works for imports, but not for classes and methods.
I made a small sample program:
import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
window = QtGui.QWidget()
window.setWindowTitle("Test")
window.resize(300, 200)
window.show()
sys.exit(app.exec_())
In the code above none of the classes or methods were suggested by PyCharm.
If I type window.setW I would expect it to suggest setWindowTitle() but it doesn't.
Strange thing is, that I'm using the same setup on my computer at home and there it works like a (Py)charm... Autocompletion, auto imports, etc. As far as I remember I installed it the same way as I did on my office PC.
I already looked at some similiar questions but this question has no answers and others don't contain relevant information that helped me so far.
Don't know if it is relevant but at this line
from PyQt4 import QtGui
PyCharm tells me
Unresolved reference 'QtGui'
Maybe the reason for this is the same.
I had the same problem on Linux, pyqt5 and pycharm CE.
The solution was to rebuild the skeletons with:
File > Invalidate Caches / Restart > Invalidate and Restart.
The problem was solved by installing PyCharm first and then Python and PyQt.
Afterwards I had to configure the interpreter in PyCharm and it worked.
When I posted the question I installed Python, then PyQt and then PyCharm.
Oddly enough, it worked in this order on another PC.
I went through the same issue recently. Unfortunately, the install order didn't solve it for me.
There is a bug report here. Downloading the Early Access Program release worked and can be found here

Categories

Resources