Τα πάντα για PyQt

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

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

Τα πάντα για PyQt

Δημοσίευσηαπό clepto » 28 Δεκ 2011, 20:45

Εδώ θα βάζουμε όλες τι απορίες για το Pyqt

αρχίζω εγώ, έχω αυτό:
Κώδικας: Επιλογή όλων
#!/usr/bin/python

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Vault(QMainWindow):
def __init__(self, parent=None):
super(Vault, self).__init__(parent)

folders = ["crypt", "vault"]
self.listwidget = QListWidget()
if folders is not None:
self.listwidget.addItems(folders)
self.listwidget.setCurrentRow(0)

layout = QHBoxLayout()
#layout.addWidget(self.listwidget)
#self.setLayout(layout)
self.setWindowTitle("List")

#if __name__ == "__main__":
# folders = ["crypt", "vault"]
app = QApplication(sys.argv)
form = Vault()
form.show
app.exec_()
μην δίνετε σημασία στο σχόλια, είναι για μερικές δοκιμές
δεν μου βγάζει σφάλμα αλλά δεν εμφανίζει κάτι στην οθόνη...
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για PyQt

Δημοσίευσηαπό pmav99 » 28 Δεκ 2011, 21:18

Πολύ σύντομα.

1. Απέφευγε τα from foo import *
2. στο main window νομίζω ότι πρέπει να χρησιμοποιήσεις την setCentralWidget

Κώδικας: Επιλογή όλων
import sys
from PyQt4.QtGui import QMainWindow, QListWidget, QHBoxLayout, QApplication

class Vault(QMainWindow):
def __init__(self, parent=None):
super(Vault, self).__init__(parent)

folders = ["crypt", "vault"]
self.listwidget = QListWidget()
if folders is not None:
self.listwidget.addItems(folders)
self.listwidget.setCurrentRow(0)

self.setWindowTitle("List")
self.setCentralWidget(self.listwidget)

def main():
app = QApplication(sys.argv)
gui = Vault()
gui.show()
sys.exit(app.exec_())

if __name__ == "__main__":
main()
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Τα πάντα για PyQt

Δημοσίευσηαπό clepto » 29 Δεκ 2011, 22:05

ξερω οτι ειναι πολυ απλο αλλα εχω κουραστει τωρα και δεν μπορω να το βρω, οταν παταω το "οκ" θελω να κλεινει το παραθυρο
Κώδικας: Επιλογή όλων
#!/usr/bin/python
# -*- coding: utf-8 -*-


from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys

class passwd(QDialog):

def __init__(self, parent=None):
super(passwd, self).__init__(parent)

text = "Password:"
self.label = QLabel(text)
self.passwdEdit = QLineEdit()
okButton = QPushButton("Ok")
layout1 = QHBoxLayout()
layout1.addWidget(self.label)
layout1.addWidget(self.passwdEdit)
layout2 = QHBoxLayout()
layout2.addStretch()
layout2.addWidget(okButton)
layout3 = QVBoxLayout()
layout3.addLayout(layout1)
layout3.addLayout(layout2)

self.setLayout(layout3)
self.setWindowTitle("Password")

self.connect(okButton, SIGNAL("clicked()"), )

app = QApplication(sys.argv)
form = passwd()
form.show()
app.exec_()
τι πρέπει να βάλω στο signal; quit? close? destroy? :twisted: :evil: :-x


edit: εντάξει το βρήκα self.close
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για PyQt

Δημοσίευσηαπό Ilias95 » 03 Ιαν 2012, 23:39

Ορίζω έναν validator σε μια LineEdit ο οποίος να επιτρέπει μόνο αριθμούς:
Κώδικας: Επιλογή όλων
validator = QRegExpValidator(QRegExp(r"\d*"), self)
lineEdit.setValidator(validator)

Θέλω όμως ο συνολικός αριθμός να μην είναι 0.
Μπορώ να το ενσωματώσω κάπως σαν όρο στον validator ή θα πρέπει να κάνω αναγκαστικά έλεγχο μετά;
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για PyQt

Δημοσίευσηαπό medigeek » 04 Ιαν 2012, 00:20

Πώς είναι οι αριθμοί; Εχουν μηδενικά μπροστά(leading zeros) όπως 001, 002, 003 ή είναι κανονικοί αριθμοί όπως 0,1,2,3..;
Δεν γνωρίζω από qregexp, αλλά ένα regex (αν υποστηρίζει την κάθετο "|" OR) θα ήταν:
Κώδικας: Επιλογή όλων
r'^[1-9]|[0-9]{2,}'


^[1-9] = Αρχίζει (^) με αριθμό 1 εως 9 (χωρίς το 0)
ή (|)
[0-9]{2,} = 2+ αριθμούς από το 0 εως 9


έγραψε:>>> import re
>>> re.search(r'^[1-9]|[0-9]{2,}', r'0')
>>> re.search(r'^[1-9]|[0-9]{2,}', r'1')
<_sre.SRE_Match object at 0x7fc961a14168>
>>> re.search(r'^[1-9]|[0-9]{2,}', r'10')
<_sre.SRE_Match object at 0x7fc961a14100>
>>> re.search(r'^[1-9]|[0-9]{2,}', r'10000')
<_sre.SRE_Match object at 0x7fc961a14168>
>>> re.search(r'^[1-9]|[0-9]{2,}', r'0')
>>> re.search(r'^[1-9]|[0-9]{2,}', r'-1')
>>> re.search(r'^[1-9]|[0-9]{2,}', r'+1')
>>> re.search(r'^[1-9]|[0-9]{2,}', r'001')
<_sre.SRE_Match object at 0x7fc961a14100>
>>> re.search(r'^[1-9]{1}|^[0-9]{2,}$', r'000')
<_sre.SRE_Match object at 0x7fc961a14168>

Ό,τι αρχίζει με μηδέν θα γίνεται match (π.χ. 001 ή 000) εκτός από το μηδέν (0).
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Τα πάντα για PyQt

Δημοσίευσηαπό Ilias95 » 04 Ιαν 2012, 00:33

Οι αριθμοί θα είναι τυχαίοι (πχ. 2400, 3689 κλπ.).
έγραψε:PyQt uses a regular expression syntax that is essentially a subset of the syntax offered by Python’s re module.

Δεν είμαι σίγουρος ότι υποστηρίζει τον "|".
Το δοκίμασα και δεν παίρνω το επιθυμητό αποτέλεσμα. (Για την ακρίβεια δεν παρατήρησα καμία αλλαγή)
Αλλά δοκίμασα να το αλλάξω σε: '^[0-9]|[2-9]{2,}'
Περίμενα να με αφήσει να γράψω στην lineEdit σε οποιαδήποτε περίπτωση. Όμως όταν γράψω τον 1ο αριθμό με αφήνει να γράψω 2o μόνο αν αυτός είναι >= 2.
Δηλαδή σαν να διαβάζει το "|" σαν και.
Θα ψάξω την σύνταξη των regular expressions της PyQt.

Edit: Άκυρο. Στο παράδειγμα που έδωσα αν ο 1ος αριθμός είναι μικρότερος από 2 δεν με αφήνει να γράψω άλλους. Σε οποιαδήποτε άλλη περίπτωση γράφω οποιουσδήποτε και oσουσδήποτε αριθμούς.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για PyQt

Δημοσίευσηαπό Ilias95 » 04 Ιαν 2012, 00:57

medigeek έγραψε:
Κώδικας: Επιλογή όλων
r'^[1-9]|[0-9]{2,}'

^[1-9] = Αρχίζει (^) με αριθμό 1 εως 9 (χωρίς το 0)
ή (|)
[0-9]{2,} = 2+ αριθμούς από το 0 εως 9

Τώρα που το ξαναβλέπω καλύτερα δεν είναι σωστή η λογική. Γιατί έτσι επιτρέπεται να ξεκινήσει με 2 μηδενικά.
Το "|" ισχύει τελικά όπως και σχεδόν όλα: http://www.riverbankcomputing.co.uk/sta ... egexp.html
Μήπως η σωστή λογική θα ήταν: "Ταίριαξε σαν πρώτο χαρακτήρα ένα νούμερο εκτός του 0 ΚΑΙ όλοι οι χαρακτήρες να είναι νούμερα";
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για PyQt

Δημοσίευσηαπό Ilias95 » 04 Ιαν 2012, 01:06

Τελικά το πέτυχα ως εξής:
Κώδικας: Επιλογή όλων
r'^[1-9]\d*'
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για PyQt

Δημοσίευσηαπό pmav99 » 04 Ιαν 2012, 02:09

Υπάρχουν έτοιμοι validators για integers και floats.

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

Re: Τα πάντα για PyQt

Δημοσίευσηαπό Ilias95 » 04 Ιαν 2012, 03:52

pmav99 έγραψε:Υπάρχουν έτοιμοι validators για integers και floats.

QDoubleValidator
QIntValidator

Επιτρέπουν και δεκαδικούς όμως. Δεν θέλω να μπορεί ο χρήστης να βάλει τελεία.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Επόμενο

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