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

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

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

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

Δημοσίευσηαπό Ilias95 » 20 Νοέμ 2011, 23:50

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

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

Δημοσίευσηαπό clepto » 21 Νοέμ 2011, 00:05

παλι λαθος μου το εδειχναν :twisted: :evil: :-x
οριστε
Κώδικας: Επιλογή όλων
#!/usr/bin/env python

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

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

class Form(QDialog):

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

principalLabel = QLabel("speed")
self.speed = QLineEdit(" ")
self.speed.selectAll()
rateLabel = QLabel("position")
self.position = QLineEdit(" ")
self.position.selectAll()
timeLabel = QLabel("time: ")
self.time = QLineEdit(" ")
self.resultLabel = QLabel()
okButton = QPushButton("OK")

grid = QGridLayout()
grid.addWidget(principalLabel, 0, 0)
grid.addWidget(self.speed, 0, 1)
grid.addWidget(rateLabel, 1, 0)
grid.addWidget(self.position, 1, 1)
grid.addWidget(timeLabel, 2, 0)
grid.addWidget(self.time, 2, 1)
grid.addWidget(self.resultLabel, 3, 0)
grid.addWidget(okButton, 3, 1)
self.setLayout(grid)

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

self.setWindowTitle("Physic")

def calculate():
speed = self.speed.text()
position = self.position.text()
time = self.time.text()
if self.speed == " ":
result = position / time
elif self.position == " ":
result = speed * time
elif self.time == " ":
result = position / speed
self.resultLabel.setText(" " % result)

#app = QApplication(sys.argv)
#form = Form()
#form.show()
#app.exec_()

πιο πριν δεν γινεται γιατι παιρνω
Κώδικας: Επιλογή όλων
Traceback (most recent call last):
File "./physic2.pyw", line 9, in <module>
form = Form()
NameError: name 'Form' is not defined

και αν το βαλω μετα
Κώδικας: Επιλογή όλων
Traceback (most recent call last):
File "./physic2.pyw", line 58, in <module>
form = Form()
File "./physic2.pyw", line 40, in __init__
self.connect(self.okButton,
AttributeError: 'Form' object has no attribute 'okButton'
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: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 21 Νοέμ 2011, 00:12

Πάλι λάθος είναι η στοίχιση.
Στο geany πήγαινε στι preferences -> επεξεργαστής -> indentation και βάλε:
width = 4, τύπος = spaces, μέθοδος αυτόματης εσοχής = Match braces, tab key indents = checked
Μετά πάς Έργο -> Apply Default indentation
Αφού διορθώσεις τις εσοχές κάνε ένα cat σε τερματικό να σιγουρευτείς ότι βγαίνουν σωστά με indentation 4 spaces.

Λογικό το error.
Κώδικας: Επιλογή όλων
form = Form()

Δεν έχεις δηλώσει πιο πάνω κάποια Form()
Επανέφερε τα υπόλοιπα εκεί που ήταν και πήγαινε πάνω μόνο την μεταβλητή app.

Edit: Για το 2ο σφάλμα έχεις δηλώσει μόνο okButton και όχι self.okButton... ;)
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

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

Δημοσίευσηαπό clepto » 21 Νοέμ 2011, 00:18

πάλι σκ@τ@ μου την βγαζει την στοιχιση...πφ
θα μπω σε Mint να το κανω
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: Τα πάντα για την Python

Δημοσίευσηαπό clepto » 21 Νοέμ 2011, 00:50

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

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

app = QApplication(sys.argv)
#form = Form()
#form.show()
#app.exec_()

class Form(QDialog):

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

principalLabel = QLabel("speed")
self.speed = QLineEdit("")
rateLabel = QLabel("position")
self.position = QLineEdit("")
timeLabel = QLabel("time: ")
self.time = QLineEdit("")
self.resultLabel = QLabel()
self.okButton = QPushButton("OK")

grid = QGridLayout()
grid.addWidget(principalLabel, 0, 0)
grid.addWidget(self.speed, 0, 1)
grid.addWidget(rateLabel, 1, 0)
grid.addWidget(self.position, 1, 1)
grid.addWidget(timeLabel, 2, 0)
grid.addWidget(self.time, 2, 1)
grid.addWidget(self.resultLabel, 3, 0)
grid.addWidget(self.okButton, 4, 1)
self.setLayout(grid)

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

self.setWindowTitle("Physic")

def calculate(self):
speed = self.speed.text()
position = self.position.text()
time = self.time.text()
if self.speed == " ":
result = position / time
self.resultLabel.setText(" " % result)
elif self.position == " ":
result = speed * time
self.resultLabel.setText(" " % result)
elif self.time == " ":
result = position / speed
self.resultLabel.setText(" " % result)
#self.resultLabel.setText(" " % result)

#app = QApplication(sys.argv)
form = Form()
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: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 21 Νοέμ 2011, 00:55

clepto έγραψε:γιατι δεν εμφανιζει κατι;

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

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

Δημοσίευσηαπό clepto » 21 Νοέμ 2011, 00:58

εννοω το αποτελεσμα
δοκιμασε να βαλεις στο speed 10 και position 20 και πατα οκ
κανονικα επρεπε να βγαλει κατω απο το time ένα 2
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: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 21 Νοέμ 2011, 01:10

Έχει πρόβλημα ο αλγόριθμος, ξανασκέψου τη λογική του.
Επίσης:
Κώδικας: Επιλογή όλων
self.resultLabel.setText(" " % result)

Μάλλον εννοείς:
Κώδικας: Επιλογή όλων
self.resultLabel.setText("%s " % result)

Ή καλύτερα με format αλλά ποιος ο λόγος; Το σωστό είναι:
Κώδικας: Επιλογή όλων
self.resultLabel.setText(result)

Επίσης με το:
Κώδικας: Επιλογή όλων
if self.speed == " ":

Μάλλον προσπαθείς να ελέγξεις αν δεν υπάρχει string. Όμως στην πραγματικότητα ελέγχεις αν υπάρχει string " ". Δηλαδή ένα κενό. Το σωστό θα ήταν:
Κώδικας: Επιλογή όλων
if not self.speed:

Θα επιστρέψει True αν δεν υπάρχει string, αλλιώς False.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

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

Δημοσίευσηαπό pmav99 » 21 Νοέμ 2011, 01:23

Κώδικας: Επιλογή όλων

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

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

class Form(QDialog):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
# Για να μη μπερδεύεσαι, για την ώρα, όλα τα widgets που κατασκευάζεις
# βάζε τα με το self.
self.principalLabel = QLabel("speed")
self.speed = QLineEdit("0")
self.rateLabel = QLabel("position")
self.position = QLineEdit("0")
self.timeLabel = QLabel("time: ")
self.time = QLineEdit("0")
self.resultLabel = QLineEdit("")
self.okButton = QPushButton("OK")
grid = QGridLayout()
grid.addWidget(self.principalLabel, 0, 0)
grid.addWidget(self.speed, 0, 1)
grid.addWidget(self.rateLabel, 1, 0)
grid.addWidget(self.position, 1, 1)
grid.addWidget(self.timeLabel, 2, 0)
grid.addWidget(self.time, 2, 1)
grid.addWidget(self.resultLabel, 3, 0)
grid.addWidget(self.okButton, 3, 1)
self.setLayout(grid)
self.connect(self.okButton, SIGNAL("clicked()"), self.calculate)
self.setWindowTitle("Physic")

# Όλες οι μέθοδοι απαιτούν το self σαν πρώτο argument...
# H λογική της calculate είναι λάθος. Ξαναδές την.
# 1. Για να κάνεις πράξεις πρέπει να μετατρέψεις τα strings σε floats.
# 2. Το if/elif/elif μπορεί να μη δώσει ποτέ τιμή στην result...
# Βάλε και κανά else για να είσαι σίγουρος...
# Διάβασε και στο βιβλίο της PyQt4 εκεί που λέει για validation.
def calculate(self):
speed = float(self.speed.text())
position = float(self.position.text())
time = float(self.time.text())


if self.speed.text() == "0":
result = position / time
elif self.position.text() == "0":
result = speed * time
elif self.time.text() == "0":
result = position / speed
self.resultLabel.setText(result)

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

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

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

Δημοσίευσηαπό clepto » 21 Νοέμ 2011, 16:44

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
Εκτύπωση

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

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