Δημοσιεύτηκε: 21 Νοέμ 2011, 01:23
από pmav99
Κώδικας: Επιλογή όλων

#!/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_()

Είχε κάτι ψιλά λαθάκια, αλλά αυτό τρέχει κανονικά. Δες τα σχόλια