Τα πάντα για την Python

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 04 Σεπ 2011, 14:41

Σωστά. Σχετικά με το δεύτερο κάτι τέτοιο σκέφτηκα και γω. Τώρα όμως έχω πρόβλημα στο κομμάτι με το Signal.
Μες την κλάση εκτός άλλων έχω τα παρακάτω:
Spoiler: show
Κώδικας: Επιλογή όλων
def __init__(self, stringlist, parent = None)
self.listWidget = QListWidget()
self.listWidget.addItems(stringlist)
self.connect(self.listWidget, SIGNAL('currentRowChanged(int)'), self.update)

def update(self):
for item in self.listWidget:
if item.isSelected():
print('ok')


Το signal που πρότεινες currentItemChanged (QListWidgetItem *,QListWidgetItem *) δεν δουλεύει όταν επιλέγω κάποιο αντικείμενο της λίστας.
To currentRowChanged αντίθετα στέλνεται, αλλά παίρνω το παρακάτω σφάλμα όταν επιλέξω οποιοδήποτε item:
Κώδικας: Επιλογή όλων
TypeError: 'QListWidget' object is not iterable

Πως τώρα θα μπορώ να καταλάβω από ποιο item ήρθε το σήμα; :?:

Μια λύση που μου ρχεται είναι να συνδέσω όλα τα items με την ίδια μέθοδο και ανάλογα να τυπώνω, αλλά δεν μου ακούγεται και τόσο καλό.
Τελευταία επεξεργασία από Ilias95 και 04 Σεπ 2011, 15:44, έχει επεξεργασθεί 1 φορά/ες συνολικά
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό pmav99 » 04 Σεπ 2011, 15:38

1. To stringlist τι είναι? Που ορίζεται? Δεν είναι ούτε attribute της κλάσης (αφού δεν έχει self μπροστά), ούτε είναι argument της μεθόδου που το χρησιμοποιείς (της __init__ στην προκειμένη). Προσπάθησε να αποφεύγεις να χρησιμοποιείς names από το global namespace. Remember the Zen of Python : Explicit is better than implicit.

2. το λάθος που παίρνεις είναι προφανές. Λες
Κώδικας: Επιλογή όλων
for item in self.listWidget
όπου το listWidget είναι ένα QListWidget. Για να μπορείς να πεις, for item in something πρέπει το something να είναι iterable, δηλαδή list, tuple, string κτλ. Δοκίμασε με αυτό λοιπόν ;)
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 04 Σεπ 2011, 15:47

1. Το ορίζω στην __init__ στον κώδικα μου απλά ξέχασα να το γράψω εδώ. Το διόρθωσα.
2. Δυστυχώς κάνοντας την update έτσι:
Κώδικας: Επιλογή όλων

for item in self.listWidget.items:
if item.isSelected():
print('ok')

Παίρνω:
Κώδικας: Επιλογή όλων
TypeError: 'builtin_function_or_method' object is not iterable
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό pmav99 » 04 Σεπ 2011, 18:20

έγραψε:list-of-QListWidgetItem QListWidget.items (self, QMimeData data)

Returns a list of pointers to the items contained in the data object. If the object was not created by a QListWidget in the same process, the list is empty.

Για να επιστρέφει τιμές, προφανώς είναι μέθοδος :P Αυτό σου λέει άλλωστε και το μήνυμα λάθους. Ότι η μέθοδος δεν είναι iterable. Η list που επιστρέφει όμως είναι !

Βάλε λοιπόν "()" στο τέλος και θα παίξει

Θυμήσου, στην Python όλα είναι αντικέιμενα. Ακόμη και τα ονόματα των συναρτήσεων

Κώδικας: Επιλογή όλων
def foo():
return "I am in foo!!!"

new_foo = foo

print(foo)
print(foo())
print(new_foo)
print(new_foo())
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 04 Σεπ 2011, 18:26

Ναι, βλακεία μου. :D Κι όμως επιμένει το σκασμένο! :P
Δοκιμάζοντας:
Κώδικας: Επιλογή όλων
for item in self.listWidget.items():

Αποτέλεσμα:
Κώδικας: Επιλογή όλων
TypeError: QListWidget.items(QMimeData): not enough arguments

Και με:
Κώδικας: Επιλογή όλων
for item in self.listWidget.items(QMimeData):
(είτε βάζοντας και self)
Δίνει:
Κώδικας: Επιλογή όλων
TypeError: QListWidget.items(QMimeData): argument 1 has unexpected type 'PyQt4.QtCore.pyqtWrapperType'
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό pmav99 » 05 Σεπ 2011, 10:59

Για δες λίγο αυτό: http://markmail.org/message/3zbhe4djgicwbm5y

μάλλον δεν είναι ο "σωστός" τρόπος, αλλά πρέπει να δουλεύει.

tip.
Να χρησιμοποιείς ipython για να παίζεις interactively με το GUI σου. Δες εδώ

Εν ολίγοις, δίνεις ipython --gui=qt και φροντίζεις να κάνεις comment οut τις ακόλουθες γραμμές κώδικα:
Κώδικας: Επιλογή όλων
if __name__ == "__main__":
#app = QApplication(sys.argv)
main = MyMainWindow()
main.show()
#sys.exit(app.exec_())


για να τρέξεις ένα αρχείο *.py από το command line της ipython δίνεις "run filename.py". Ψάξτο λίγο και θα δεις ότι θα σου λύσει τα χέρια.
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 06 Σεπ 2011, 00:26

Ναί, δούλεψε! :bow:
Τον κρατάμε και ας μην είναι ο σωστότερος. :D
Κάποια στιγμή θα δω και σχετικά με την ipython.
Ευχαριστώ!
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό pmav99 » 06 Σεπ 2011, 00:35

άμα δεις τώρα, θα το γράψεις στο μισό χρόνο :P
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 06 Σεπ 2011, 00:52

pmav99 έγραψε:άμα δεις τώρα, θα το γράψεις στο μισό χρόνο :P

:lol: :lol: :lol:
Εάν είναι έτσι ξεκινάω από αύριο... :geek: :P
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 08 Σεπ 2011, 00:43

Προσπαθώ να στείλω e-mail μέσω της Python με τον παρακάτω κώδικα:

Κώδικας: Επιλογή όλων
#!/usr/bin/python3

import smtplib
from email.mime.text import MIMEText

msg = MIMEText('mpla mpla')
msg['Subject'] = 'The contents of '
msg['From'] = 'xxxxxxx@xxxx.com'
msg['To'] = 'xxxxx@xxxx.gr'

s = smtplib.SMTP('localhost')
s.send_message(msg)
s.quit()


Δυστυχώς παίρνω σφάλμα:
Spoiler: show
Κώδικας: Επιλογή όλων
Traceback (most recent call last):
File "test4.py", line 11, in <module>
s = smtplib.SMTP('localhost')
File "/usr/lib/python3.2/smtplib.py", line 250, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.2/smtplib.py", line 306, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python3.2/smtplib.py", line 284, in _get_socket
return socket.create_connection((host, port), timeout)
File "/usr/lib/python3.2/socket.py", line 398, in create_connection
raise err
File "/usr/lib/python3.2/socket.py", line 389, in create_connection
sock.connect(sa)
socket.error: [Errno 111] Connection refused

Τον κώδικα τον βρήκα στην Standard Libray.
Τα αποτελέσματα της αναζήτησης στο google για το πως να στείλεις e-mail παραπέμπουν όλα σε αυτόν ή σε παρόμοιο κώδικα.
Τι πάει στραβά; Πως μπορώ να το διορθώσω;
Τελευταία επεξεργασία από Ilias95 και 08 Σεπ 2011, 01:11, έχει επεξεργασθεί 1 φορά/ες συνολικά
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι

cron