Methode für mehrere Widgets - Wie gehts das????

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
schwatter
User
Beiträge: 2
Registriert: Mittwoch 1. Februar 2012, 09:37

Hallo,
Ich bin ganz neu im Python programmieren und habe mich für Qt als Gui-Entwicklung entschieden, aufgrund der vielfältigen Möglichkeiten.

Nun stehe ich vor einem kleinem Problem, welches sich jedoch als sehr komplex herausstellt:
Ich habe mehrere LineEdit-Widgets, deren textChanged()-Signale ich zur Laufzeit auf Korrektheit (es dürfen nur in float umwandelbare Strings eingegeben werden) überprüfen möchte. Ich möchte aber beim Überprüfen wissen, welches Widget ich da überprüfe. Also eine Identifizierung des über die "connection" verbundenen Objektes.

Mein Code sieht folgendermaßen aus:

Code: Alles auswählen

import sys
from PyQt4 import QtGui, uic

class MeinLineEditDialog(QtGui.QMainWindow):
    def __init__(self): 
        QtGui.QMainWindow.__init__(self) 
        self.ui = uic.loadUi("LineEditUI.ui")
        self.ui.show()

        self.ui.lineEdit_1.textChanged.connect(self.CeckFloat)
        self.ui.lineEdit_2.textChanged.connect(self.CeckFloat)
        self.ui.lineEdit_3.textChanged.connect(self.CeckFloat)
        self.ui.lineEdit_4.textChanged.connect(self.CeckFloat)

    def CeckFloat(self, text):
            try:
                if len(text) > 0:
                    float(text)
                    self.ui.statusbar.showMessage("To Float")
            except:
                self.ui.statusbar.showMessage("no Float @" + str(self.ui.widget.objectName) )

if __name__=="__main__":
    app=QtGui.QApplication(sys.argv)
    dings=MeinLineEditDialog()
    sys.exit(app.exec_())
Ich würde nun gerne in der except-Anweisung mit ausgeben, bei welchem LineEdit-Element die Exeption kommt.
Dafür müsste ich aber wohl der CheckFloat-Methode das connectete Widget als Parameter mit übergeben. Wie kann ich das bewerkstelligen??
das

Code: Alles auswählen

str(self.ui.widget.objectName)
ist auf jeden Fall falsch. Und bezieht sich wohl auf das Haupt-Widget des MainWindow-Objektes.

Ich hoffe auf Eure Hilfe bei dem Problem!




Die Ui würd ich gerne anhängen aber das geht hier im Forum wohl nicht. Ich finds auf jeden Fall nicht.
Dann hier der Code "LineEditUI.ui":

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>216</width>
    <height>215</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QWidget" name="">
    <property name="geometry">
     <rect>
      <x>7</x>
      <y>17</y>
      <width>148</width>
      <height>128</height>
     </rect>
    </property>
    <layout class="QVBoxLayout" name="verticalLayout">
     <item>
      <widget class="QLineEdit" name="lineEdit"/>
     </item>
     <item>
      <widget class="QLineEdit" name="lineEdit_2"/>
     </item>
     <item>
      <widget class="QLineEdit" name="lineEdit_3"/>
     </item>
     <item>
      <widget class="QLineEdit" name="lineEdit_4"/>
     </item>
    </layout>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>216</width>
     <height>23</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>
BlackJack

@schwatter: Für Eingabeüberprüfungen ist eigentlich die `QValidator`-Klasse vorgesehen. Mit `QDoubleValidator` gibt es sogar einen, der auf Dezimalbrüche prüft.
schwatter
User
Beiträge: 2
Registriert: Mittwoch 1. Februar 2012, 09:37

Wie kann ich denn dann die QDoubleValidator-Klasse in meinem Python Skript nutzen?
BlackJack

@schwatter: Ähnlich wie die C++-Klasse in einem C++-Programm. Hier ist die Dokumentation zur Basisklasse `QValidator`: http://developer.qt.nokia.com/doc/qt-4. ... ml#details
Antworten