Seite 1 von 1
QT / Python Type Casting
Verfasst: Montag 15. Februar 2016, 21:31
von hans
Schlage mich schon den ganzen Tag damit herum, dieses kleine simple Programm zum Laufen zu bringen. Ich verzweifele an der Variable a. Scheint doch etwas anders zu sein als Delphi
Programm
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys
from PyQt4.QtGui import QApplication
from PyQt4.uic import loadUi
from ctypes import *
def main():
app = QApplication(sys.argv)
window = loadUi("mainwindow.ui")
def calculate():
a = window.progressBar.value # <----- Das Problem
print(a)
window.progressBar.setValue(a)
window.pushButton.clicked.connect(calculate)
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Fehlermeldung
Code: Alles auswählen
<built-in method value of QProgressBar object at 0x7f05746e3e90> ###<------ Ausgabe von print(a)
Traceback (most recent call last):
File "./hello.py", line 17, in calculate
window.progressBar.setValue(a)
TypeError: QProgressBar.setValue(int): argument 1 has unexpected type 'builtin_function_or_method'
Habe schon alles mögliche probiert. Wie greift man in QProgressBar auf value zu?
Re: QT / Python Type Casting
Verfasst: Montag 15. Februar 2016, 21:43
von BlackJack
@hans: Das hat in diesem Fall überhaupt nichts mit Python zu tun, auch C++ muss man Methoden *aufrufen*. Die `print()`-Ausgabe verrät es im Grunde ja schon das Du da versuchst eine Methode als Zahlwert zu übergeben.
Re: QT / Python Type Casting
Verfasst: Montag 15. Februar 2016, 21:49
von hans
Tja, jetzt muss ich dumm fragen. Und was verwendet man statt value? Wie steuere ich den Fortschrittsbalken?
Wenn ich das ertse QT Element kapiert habe, wird es mit den folgenden hoffentlich leichter

Re: QT / Python Type Casting
Verfasst: Montag 15. Februar 2016, 22:06
von pillmuncher
@hans: Das hat nichts mit Qt zu tun. Wie BlackJack schon schrieb, muss man Funktionen auch aufrufen. Schau her:
Code: Alles auswählen
In [1]: def foo():
...: return 123
...:
In [2]: foo
Out[2]: <function __main__.foo>
In [3]: foo()
Out[3]: 123
Das gleiche gilt natürlich auch für Methoden.
Re: QT / Python Type Casting
Verfasst: Montag 15. Februar 2016, 22:21
von hans
...... und schon geht die Sonne auf.
Aber jetzt einmal allgemein gefragt. In der Dokumentation QT 5.5 QProgressbar ist value als Property (value : int) aufgeführt und als publicFunction (int value() const). Ich sehe das richtig, dass ich nur die Elemente, welche auf public gesetzt sind, verfügen kann, egal um welche QT Klasse es sich auch handelt?
Ich schaffe das

Re: QT / Python Type Casting
Verfasst: Montag 15. Februar 2016, 23:22
von BlackJack
@hans: Hier liegt vielleicht ein Missverständnis mit C++ und Qt vor: C++ kennt keine Properties im Sinne von Delphi oder Python (oder Dart

). Wenn in der Qt-Dokumentation etwas von einem Property `foo` steht, dann ist damit effektiv gemeint es gibt eine `foo()`-Methode und eine `setFoo()`-Methode.
Re: QT / Python Type Casting
Verfasst: Dienstag 16. Februar 2016, 00:16
von hans
Erst einmal Danke an BlackJack und pillmuncher. So ist das eben wenn man "verbildet" ist. Aber wenn man lernt die Doku richtig zu lesen, dann wird es schon. Im Vergleich der Python Programmierung unter GIMP ist eine Python QT Anwendung ja noch einfach

<vielleicht hat mal jemand Lust, sich in GIMP mit den Vektoren (Pfaden) zu beschäftigen.
Re: QT / Python Type Casting
Verfasst: Dienstag 16. Februar 2016, 00:44
von BlackJack
@hans: Sind die komplizierter als `QPainterPath`?

Re: QT / Python Type Casting
Verfasst: Dienstag 16. Februar 2016, 08:59
von hans
@BlackJack
Ach, so etwas gibt es in QT auch? Also ich habe mich an die Dinger nie heran gewagt. Der Aufbau kann wie folgt beschrieben werden:
Gegeben sind zwei Punkte, verbunden durch einen Linie. Jeder Endpunkt der Linie hat einen Vektor, welcher frei um seinen Ausgangspunkt bewegt werden kann. Abstand und Winkel sind variabel und haben Auswirkung auf die Form der Linie.
Mit zwei Linien kann man z.B. einen Kreis definieren. Frage: Möglich dass so etwas in der Statik (Fachwerk) verwendet wird?
Re: QT / Python Type Casting
Verfasst: Dienstag 16. Februar 2016, 10:39
von BlackJack
@hans: Kurven beim Fachwerk? Vielleicht wenn der Architekt besoffen war.
Verschiedene Kurven (Bezier, quadratische oder kubische Splines, …) sind eigentlich ziemlich normal in der Computergrafik. Jedes Vektorgrafikprogramm bietet so etwas und pixelorientierte wie Gimp meistens auch in irgendeiner Form, weil die halt sehr praktisch sind um geschwungene Linien/Pfade zeichnen zu können, die man nachträglich noch bearbeiten kann. Die entsprechen ungefähr den Kurvenlinealen mit denen man so etwas auf Papier machen kann/machte, nur ohne die Veränderungsmöglichkeiten. Radiergummi und neuzeichnen mal ausgenommen.

Re: QT / Python Type Casting
Verfasst: Mittwoch 17. Februar 2016, 05:46
von hans
Ich wusste es doch

Gleich der erste Versuch bei Google (Statik, Vektor) ergibt einen
Treffer.
Die Anwendung in den Programmen wie GIMP ist für mich kein Problem, sondern nur die Programmierung. Vielleicht liegt es auch nur an der spartanischen Dokumentation.