Pyqt4 και Pyqt5

Καλημέρα παιδιά.
Είχα ένα σκριπτάκι που μου έδειχνε την IP με τρόπο ωραίο και βολικό (για μένα και για τα γούστα μου βέβαια).
Έχω βάλει το MInt 20.1 και κατάλαβα ότι δεν υπάρχει δυναότητα να εγκαταστήσω το pyqt4. Μάλιστα κάπου είδα ότι: το Qt δεν υποστηρίζει πλέον το Pyqt4. Έτσι το είδα να γράφεται σε κάποιο σάιτ στα ααγγλικά και ανάθεμα αν είναι διαφωτιστικό για μένα. Από αυτή τη φράση κατάλαβα ότι το QT είναι κάποιος οργανισμός και ότι αυτός διαθέτει το pyqt.
Τέλος Πάντων όταν το τρέχω στο τερματικό, μου βγάζει

Traceback (most recent call last):
  File "IP/ip", line 5, in <module>
    from pyqt4 import   QtCore, QtGui, uic
ImportError: No module named PyQt4.

ΟΚ λέω, θα το κάνω pyqt5. Δεν μπορεί θα καλύπτει αυτό που θέλω. Κι ενώ εγκατέστησα ό,τι είδα σχεδόν να αναφέρει το pyqt5 πάλι δουλειά δεν μπορώ να κάνω.
άλλαξα τη γραμμή και το αποτέλεσμα είναι:

Traceback (most recent call last):
  File "IP/ip", line 5, in <module>
    import  PyQt5.QtCore, QtCore, QtGui, uic
ImportError: No module named PyQt5.QtCore

Καμιά ιδέα;

Το όλο σκριπτάκι είναι:

#!/usr/bin/env python
# -*- coding: utf-8 -*

import sys
from PyQt4 import QtCore, QtGui, uic
import subprocess,sys,os,urllib2,string

unioptions = ['--unicode', '-u', '--utf8', '--utf-8']



try:
  from PyQt4 import QtCore, QtGui
except ImportError :
  print "You need to have PyQT4 installed..."
  exit()

 
fuck = u"Είναι η : "

#---Tray Icon Message Dialog---#
def MsgInfo( reason ):
   
   if reason == IpIcon.Trigger:
      
      pub_ip = urllib2.urlopen("http://checkip.dyndns.org").read()
      
      IpIcon.showMessage(u"IP ρε μαλάκα", fuck  + pub_ip, IpIcon.Information, 15000)
      

def main():
   #-----Main App-----#
   global Ip
   global IpIcon
   Ip = QtGui.QApplication(sys.argv)
   
   
   IpIcon = QtGui.QSystemTrayIcon()
   Ip.setQuitOnLastWindowClosed(False)
   #pub_ip = urllib2.urlopen("http://checkip.dyndns.org/").read()
   pub_ip = urllib2.urlopen("http://forum.ubuntu-gr.org/rss.php").read()
   IpIcon.setToolTip(pub_ip)
   #---Tray Menu Icons---#
   QuitIcon = QtGui.QIcon("ip.png")
   TrayIcon = QtGui.QIcon("ip.png")
   
        #-----Tray Menu-----#   
   global ActionsMenu
   ActionsMenu = QtGui.QMenu()
   QuitAction = ActionsMenu.addAction(QuitIcon,u"Πάρε τον πούλο !!!")
   
   #-----Tray Menu Actions-----#
   Ip.connect(QuitAction,QtCore.SIGNAL("triggered()"),Ip.exit)
   IpIcon.connect( IpIcon, QtCore.SIGNAL( "activated(QSystemTrayIcon::ActivationReason)" ), MsgInfo )


   #-----Methods-----#
   IpIcon.setIcon(TrayIcon)
   IpIcon.setContextMenu(ActionsMenu)

   IpIcon.show()
   
   Ip.exec_()
main()

Άλλαξα μετά τη γραμμή εκεί πάνω που λέει from PyQt4 import QtCore, QtGui, uic βάζοντας το 5 αντί του 4 και με μία προσαρμογή που νομίζω ότι έπρεπε, αφού είδα στι ίντερνετ να το γράφουν με αυτήν τη μορφή:

import  PyQt5.QtCore, QtCore, QtGui, uic

Δηλαδή χωρίς from και όχι σκέτο το pyqt5 όπως πριν αλλά PyQt5.QtCore

Α και συγνώμη για τα “ρε μ@λκ@” που γράφω μέσα. Το έκανα για να με διασκεδάζει ως προσωπικό σκριπτάκι.

To script είναι python2 και pyqt4, οπότε θέλει πολύ περισσότερες αλλαγές για να δουλέψει. Έκανα κάποιες αλλαγές με λίγο ψάξιμο στο google και έτσι ξεκινάει τουλάχιστον:

#!/usr/bin/env python
# -*- coding: utf-8 -*

import sys
from PyQt5 import QtCore, QtGui, QtWidgets, uic
import subprocess,sys,os,urllib.request,string

unioptions = ['--unicode', '-u', '--utf8', '--utf-8']

try:
  from PyQt5 import QtCore, QtGui, QtWidgets
except ImportError :
  print("You need to have PyQT5 installed...")
  exit()

 
fuck = u"Είναι η : "

#---Tray Icon Message Dialog---#
def MsgInfo( reason ):
   
   if reason == IpIcon.Trigger:
      
      pub_ip = urllib2.urlopen("http://checkip.dyndns.org").read()
      
      IpIcon.showMessage(u"IP ρε μαλάκα", fuck  + pub_ip, IpIcon.Information, 15000)
 
def exit_app():
	Ip.exit()     

def main():
   #-----Main App-----#
   global Ip
   global IpIcon
   Ip = QtWidgets.QApplication(sys.argv)
   
   
   IpIcon = QtWidgets.QSystemTrayIcon()
   Ip.setQuitOnLastWindowClosed(False)
   #pub_ip = urllib2.urlopen("http://checkip.dyndns.org/").read()
   pub_ip = urllib.request.urlopen("http://checkip.dyndns.org/").read()
   IpIcon.setToolTip(str(pub_ip))
   #---Tray Menu Icons---#
   QuitIcon = QtGui.QIcon("ip.png")
   TrayIcon = QtGui.QIcon("ip.png")
   
        #-----Tray Menu-----#   
   global ActionsMenu
   ActionsMenu = QtWidgets.QMenu()
   QuitAction = ActionsMenu.addAction(QuitIcon,u"Πάρε τον πούλο !!!")
   
   #-----Tray Menu Actions-----#
   #Ip.connect(QuitAction,QtCore.SIGNAL("triggered()"),Ip.exit)
   QuitAction.triggered.connect(exit_app)
   #IpIcon.connect( IpIcon, QtCore.SIGNAL( "activated(QSystemTrayIcon::ActivationReason)" ), MsgInfo )
	
   #-----Methods-----#
   IpIcon.setIcon(TrayIcon)
   IpIcon.setContextMenu(ActionsMenu)

   IpIcon.show()
   
   Ip.exec_()
main()

Δεν ξέρω τι ακριβώς υποτίθεται ότι κάνει και ούτε και λειτουργεί σωστά βέβαια μιας και χρειάζονται πιθανότατα μερικές ακόμη τροποποιήσεις.
Το παραπάνω πάντως μπαίνει στο tray αλλά δεν εμφανίζει εικονίδιο. Εμφανίζει το κείμενο αλλά μάλλον όχι όπως θέλεις, και γίνεται έξοδος με δεξί κλικ.

3 «Μου αρέσει»

Ο τρόπος όμως με τον οποίο παρατίθεται ο κώδικας, ειδικά στην περίπτωση της Python δε θα δουλέψει. Με ένα απλό copy paste δεν τρέχει τίποτα. Τροποίησε τον κατάλληλα και βάλε τα απαραίτητα code tags.

1 «Μου αρέσει»

@ dancaer69 Το εικονίδιο δεν το ανέφερα έχεις δίκιο. Είναι στον ίδιο φάκελο με το σκριπτ και είναι αυτό

.
Αυτό ακριβώς κάνει.Ήθελα να βγάζει αναδυόμενο παραθυράκι (ποπάπ που το λένε οι Έλληνες :crazy_face: ) ώστε να μην κάνεις κλικ και να δεις έτοιμη την IP σου. Όχι ότι θα μας πέσει ο κ…ος με το κλικ, αλλά… είναι ωραίο ρε παιδί μου. Μου φέρνει σε πιο φουτουριστική τεχνολογία. Ωστόσο έχει και κλικ για όποιον γουστάρει. Με το κλικ βγαίνει το παραθυράκι και κολλάει εκεί μέχρι να το κλείσεις με το “Χ” πάνω δεξιά. Στο δεξί κλικ απλά έχεις την προτροπή για το κλείσιμο.

Θα το δοκιμάσω και σας πω. Σ’ ευχαριστώ πάρα πολύ (Κερνάω και ποτάκι δηλαδή)

@billniakas δούλευε κανονικά. Κάπου στο copy-paste θα έγινε η δουλειά που λες, καθως το πόσταρα. Δεν το παρατήρησα να σου πω την αλήθεια αλλά το βασικότερο είναι ότι δεν μου πέρασε από το μυαλό. Θα το φροντίσω αν είναι για να το τρέξεις και να το δεις τι κάνει (Άμα θες και αφού λειτουργήσει)
Κι εσένα σ’ ευχαριστώ (και κερνάω ποτάκι).

Αλήθεια ρε σεις, ας το δούμε καμιά φορά το θέμα μιας βόλτας. Συνηθίζεται στα φορούμια, το ξέρετε.
Εκτός θέματος βέβαια αλλά έχετε το στο νου σας μπας και ωριμάσει κάποια στιγμή και κάποιος από όλους μας κάνει την πρόταση.

Τελικά έχω βάλει πάρα πολλά πακέτα ακόμα μου βγάζει το ίδιο μήνυμα. There is no module pyqt5.

Δεν έχω mint, αλλά δες αν έχεις βάλει τα παρακάτω:
python3-pyqt5, pyqt5-dev-tools, qttools5-dev-tools

Πάνω στον κώδικα του @dancaer69 για να βγάζει και το pop-up όταν κάνεις click και για πιο “καθαρή” απεικόνιση της Ip :

# -*- coding: utf-8 -*

import sys
from PyQt5 import QtCore, QtGui, QtWidgets, uic
import subprocess,sys,os,urllib.request,string

unioptions = ['--unicode', '-u', '--utf8', '--utf-8']

try:
  from PyQt5 import QtCore, QtGui, QtWidgets
except ImportError :
  print("You need to have PyQT5 installed...")
  exit()

 
fuck = u"Είναι η : "

   
#---Tray Icon Message Dialog---#
def MsgInfo(reason):
   if reason == IpIcon.Trigger:
      pub_ip = str(urllib.request.urlopen("http://checkip.dyndns.org/").read())
      pub_ip = pub_ip.replace("Current IP Address:","")
      pub_ip = pub_ip.replace("b'<html><head><title>Current IP Check</title></head><body>","")
      pub_ip = pub_ip.replace("</body></html>\\r\\n'","")
      IpIcon.showMessage(u"IP ρε μαλάκα", fuck  + pub_ip, IpIcon.Information, 5000)
 
def exit_app():
	Ip.exit()     

def main():
   #-----Main App-----#
   global Ip
   global IpIcon
   Ip = QtWidgets.QApplication(sys.argv)
   IpIcon = QtWidgets.QSystemTrayIcon()
   Ip.setQuitOnLastWindowClosed(False)
   pub_ip = str(urllib.request.urlopen("http://checkip.dyndns.org/").read())
   pub_ip = pub_ip.replace("Current IP Address:","")
   pub_ip = pub_ip.replace("b'<html><head><title>Current IP Check</title></head><body>","")
   pub_ip = pub_ip.replace("</body></html>\\r\\n'","")
   IpIcon.setToolTip(u"IP ρε μαλάκα"+str(pub_ip))

   #---Tray Menu Icons---#
   QuitIcon = QtGui.QIcon("ip.png")
   TrayIcon = QtGui.QIcon("ip.png")
   
   #-----Tray Menu-----#   
   global ActionsMenu
   ActionsMenu = QtWidgets.QMenu()
   QuitAction = ActionsMenu.addAction(QuitIcon,u"Πάρε τον πούλο !!!")
   
   #-----Tray Menu Actions-----#
   QuitAction.triggered.connect(exit_app)
   IpIcon.activated.connect(MsgInfo)

   #-----Methods-----#
   IpIcon.setIcon(TrayIcon)
   IpIcon.setContextMenu(ActionsMenu)

   IpIcon.show()
   
   Ip.exec_()

main()

Μπορεί να γίνει και καλύτερο - συντομότερο…
Τα πακέτα που θα πρέπει να εγκαταστήσεις είναι :

libc-dev-bin libc6-dev libcrypt-dev libexpat1-dev libpython3-dev libpython3.8-dev pyqt5-dev python3-dev python3-distutils python3-lib2to3 python3-sip python3-sip-dev python3.8-dev sip-dev zlib1g-dev python-is-python3 libqt5designer5 libqt5help5 libqt5printsupport5 libqt5sql5 libqt5sql5-sqlite libqt5test5 libqt5xml5 python3-pyqt5

Δεν είναι απαραίτητα όλα, αλλά όταν εγκαταστήσεις τα βασικά δηλαδή python3-pyqt5,
python-is-python3, pyqt5-dev, python3-dev “τραβάνε” μαζί τους και τα υπόλοιπα.

3 «Μου αρέσει»

Είστε μάγκες. Σας ευχαριστώ και τους δύο.

2 «Μου αρέσει»

Δεν ξέρω τι έγινε, αλλά ενώ έτρεχε μια χαρά όπως το φτιάξατε και το αντέγραψα, σήμερα βλέπω (όχι ότι έγινε σήμερα η ζημιά. Σήμερα το παρατήρησα) ότι δεν δουλεύει. Λέει πάλι

from PyQt5 import QtCore, QtGui, QtWidgets, uic

ImportError: No module named PyQt5

Πήγα να ξαναβάλω όλα τα πακέτα και όλα είναι εντάξει πλην από δύο!

$ sudo apt install libc-dev-bin libc6-dev libcrypt-dev libexpat1-dev libpython3-dev libpython3.8-dev pyqt5-dev python3-dev python3-distutils python3-lib2to3 python3-sip python3-sip-dev python3.8-dev sip-dev zlib1g-dev python-is-python3 libqt5designer5 libqt5help5 libqt5printsupport5 libqt5sql5 libqt5sql5-sqlite libqt5test5 libqt5xml5 python3-pyqt5

Ανάγνωση λιστών πακέτων... Ολοκληρώθηκε
Κατασκευή Δένδρου Εξαρτήσεων... Ολοκληρώθηκε  
Ανάγνωση πληροφοριών κατάστασης... Ολοκληρώθηκε      


Το πακέτο libpython3.8-dev δεν είναι διαθέσιμο, αλλά υπάρχει αναφορά για αυτό από άλλο πακέτο.
Αυτό σημαίνει ότι το πακέτο αυτό λείπει, είναι παλαιωμένο, ή είναι διαθέσιμο από άλλη πηγή
Πάραυτα το ακόλουθο πακέτο το αντικαθιστά:
  libpython3-dev:i386 libpython3-dev

E: Το πακέτο libpython3.8-dev δεν έχει υποψήφια εγκατάσταση
E: Αδυναμία εντοπισμού του πακέτου python3.8-dev
E: Δεν βρέθηκε κάποιο πακέτο με το glob 'python3.8-dev'

Εγκατέστησε τα python3.9-dev και libpython3.9-dev

Είναι ήδη εγκατεστημένα βλέπω στο synaptic. Όπως και το python3.9 i386. Μόνο το libpython3.9-dev i386 δεν είναι και είπα να το βάλω (μπας και θέλει την αρχιτεκτονική αυτή) αλλά λέει ότι θα βγάλει τα άλλα και το άφησα