Image in TableWidget

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
solar22
User
Beiträge: 27
Registriert: Donnerstag 14. Oktober 2010, 20:31

Hallo!

Wie ist es möglich in einer Tabellenzelle ein Bild darzustellen? :K

Gruß!

solar22
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Was für ein GUI Toolkit verwendest du denn überhaupt?

Grüße,
anogayales
solar22
User
Beiträge: 27
Registriert: Donnerstag 14. Oktober 2010, 20:31

Ich benutze PyQt4.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du meinst in einer Zelle eines TableViews? Da solltest Du Dir zuerst einmal den MVC-Guide aus der Qt Doku durcharbeiten. Dann kannst Du daran gehen, Dir ein eigenes Model zu schreiben, das vermutlich auf QTableView basiert und die data()-Methode entsprechend überschreibt.

lunar hat dazu auch mal etwas implementiert:
https://bitbucket.org/lunar/snippets/sr ... istview.py
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Wenn ein Icon für dich ein Bild ist, Antwort Ja:

Code: Alles auswählen

QTableWidgetItem::setIcon ( const QIcon & icon )
Aber wenn ich micht recht erinner gibt es Einschränkungen bei der Größe.
Ich hab aber in der QIcon-Klasse auf die Schnelle nichts dazu gefunden.
Vielleicht langt dir das schon ?

Gruß
Zuletzt geändert von ichisich am Montag 24. Januar 2011, 10:54, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wenn das nicht reicht, wird es komplizierter, da man dann vermutlich einen eigenen Delegate schreiben muss.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

@Hyperion
Greift der Delegate nicht nur beim Editieren oder Mausdrüber etc. der View ?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

ichisich hat geschrieben:@Hyperion
Greift der Delegate nicht nur beim Editieren oder Mausdrüber etc. der View ?
Na Du musst ja irgend wie eine paint()-Methode überschreiben und bevor ich da einen ganzen View angehe, hätte ich eben an einen Delegate gedacht, der sich ja nur um einzelne Zellen kümmern muss.

Das Beispiel aus der Qt-Doku zeigt dieses Vorgehen.

Nur weil ein Delegate sich auch um User-Interaktion kümmert, muss man das ja nicht nutzen ;-)

Vielleicht belehrt mich lunar aber auch eines besseren und zeigt einen alternativen Weg auf (ggf. eben über das Subclassing eines TableViews).

Eines ist aber sicher: Man braucht in jedem Falle ein eigenes Model :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Hab aus interesse bisschen gebastelt.
Mit dem Delegate und der überschriebenen paint-Methode hab ich zwar das Bild gezeichnet bekommen aber immeer nur in der ersten Zelle.

Naja habs dann auch nicht weiter verfolgt aber bin dann auf
das hier gestoßen.

Code: Alles auswählen

    pixmap = QtGui.QPixmap("./ein_bild.png")
    widget = QtGui.QLabel(main_win)
    widget.setPixmap(pixmap)
    widget.resize(pixmap.size())
    main_win.tableWidget.setCellWidget(0,0,widget)
    main_win.tableWidget.resizeColumnToContents (0)
    main_win.tableWidget.resizeRowToContents (0)
wäre eine Möglichkeit.

Gruß
Antworten