Checkbox wird in tabelle unter MacosX falsch dargestellt

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Hallo,

ich habe folgendes Problem.

Ich habe in einem Tabellenmodell mir für die Darstellung von Booleanwerte eine Checkbox als delegate eingerichtet.

[codebox=python file=Unbenannt.txt]
# coding=utf-8

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *


class CheckBoxDelegate(QItemDelegate):
def __init__(self, parent=None):
QItemDelegate.__init__(self, parent)
self.chkboxSize = 19 # ?!

def createEditor(self, parent, option, index):
chkbox = QCheckBox(parent)
chkbox.setText('')
chkbox.setTristate(False)
left = option.rect.x() + (option.rect.width() - self.chkboxSize) / 2
top = option.rect.y() + (option.rect.height() - self.chkboxSize) / 2
chkbox.setGeometry(left, top, self.chkboxSize, self.chkboxSize)
return chkbox

def paint(self, painter, option, index):
value = index.data()
opt = QStyleOptionButton()
opt.state |= QStyle.State_Enabled | (QStyle.State_On if value else QStyle.State_Off)
opt.text = ''
left = option.rect.x() + (option.rect.width() - self.chkboxSize) / 2
top = option.rect.y() + (option.rect.height() - self.chkboxSize) / 2
opt.rect = QRect(left, top, self.chkboxSize, self.chkboxSize)
QApplication.style().drawControl(QStyle.CE_CheckBox, opt, painter)

def updateEditorGeometry(self, editor, option, index):
pass
[/code]

diese habe ich dann wie folgt eingebunden

Code: Alles auswählen

self.dataTBL.setItemDelegateForColumn(2, CheckBoxDelegate(self.dataTBL))
Das funktioniert auch auf Windows und unter Linux so weit ganz gut. Nur unter MacOSX gibt es Darstellungsfehler. Die Checkbox wird nicht mehr in der Spalte 3 dargestellt sondern überdeckt das Datum der 1. Spalte. (siehe Screenshots) Was kann ich machen, dass es solche Darstellungsfehler vermeiden kann und wie behebe ich diesen?


Linux: https://www.dropbox.com/s/c1ci3l89fp4v4 ... p.png?dl=0
MacOs: https://www.dropbox.com/s/z9vm6qybnajx4 ... 1.png?dl=0
Windows: https://www.dropbox.com/s/ptfvfwo73oo21 ... 4.png?dl=0

VG niesel
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@nieselfriem:
Schau mal, ob das Problem verschwindet, wenn Du explizit den Fusion-Style benutzt. In Qt 5.4 bis 5.6 war das ein bekannter Bug.
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Hi,

sagen wir es mal so. Die Checbox wird jetzt richtig dargestellt. Wenn man jedoch den Wert verändern will, dann kommt es zu diesem interessanten Fehler, dass man ein Dropdownmenü mit true und False präsentiert bekommt. :?

Die Frage, ist nun, wie kann man das QT auf einem Mac Updaten. Das ist ja schon so weit ich weiß vorinstalliert. Da dies nicht mein mac ist, sondern der meiner Freundin, kann ich nicht so wild schalten und walten wie ich will ;)

https://www.dropbox.com/s/nw2iwg844c5mz ... 5.png?dl=0


VG niesel
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das waere dann der erste Mac der mir unterkommt, auf dem das vorinstalliert ist. Das wird entweder explizit per Installer installiert, oder ueber so etwas wie homebrew etc. als Paket. Wie das auf dem Mac deiner Freundin aussieht ist fuer mich aus naheliegenden Gruenden nicht ersichtlich ;)
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Laut Systeminformation ist folgendes installiert:

QTKit:

Version: 7.7.3
Erhalten von: Apple
Zuletzt geändert: 18.10.15, 03:26
Art: Intel
64-Bit (Intel): Ja
Signiert von: Software Signing, Apple Code Signing Certification Authority, Apple Root CA
Informationen: QTKit 7.7.3, Copyright 2003-2012, Apple Inc.
Ort: /System/Library/Frameworks/QTKit.framework
Privat: Nein


vg niesel
BlackJack

@nieselfriem: Das ist Apple's QuickTime. Hat nichts mit Qt zu tun. :-)
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Ok, ich dachte nur, dass Apple das Framework anders benennt. Ich hatte das nach dieser Anleitung herausgesucht.

http://stackoverflow.com/questions/7912 ... n-mac-os-x

Ber davon mal abgesehen, habe ich auf diesem Mac nur PyQT mit pip3 installiert. Das komplette Framework als DMG File habe ich da nicht herunterlgeladen. Weiß denn jemand, wie ich beim MC dann die Version des Framework ermittel?

VG niesel
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn das Programm laueft, kannst du dir im Activity Monitor anschauen, welche Bibliotheken alle geladen sind. Dazu auf "Info" klicken, und die geoeffneten Dateien anzeigen.

Sieht bei meinem flymake-Python vom Emacs gestartet zb so aus:

Code: Alles auswählen

cwd
/Volumes/untitled/cross-env/scripts
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/Python
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_locale.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/readline.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_collections.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/operator.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/itertools.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_heapq.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/grp.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/time.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/select.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/fcntl.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_struct.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/binascii.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/cStringIO.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/strop.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/zlib.so
txt
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_functools.so
txt
/usr/lib/dyld
txt
/private/var/db/dyld/dyld_shared_cache_x86_64
0
/dev/ttys005
1
/dev/ttys005
2
/dev/ttys005
5
/Users/dir/Library/Saved Application State/org.gnu.Emacs.savedState/data.data
6
/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Resources/Extras2.rsrc
7
/System/Library/Frameworks/CoreImage.framework/ci_kernels.metallib
8
/private/var/folders/s_/0j3hmy3x2l799l9z2zglgn3r0000gr/C/org.gnu.Emacs/com.apple.metal/libraries.maps
9
/private/var/folders/s_/0j3hmy3x2l799l9z2zglgn3r0000gr/C/org.gnu.Emacs/com.apple.metal/libraries.data
10
/private/var/folders/s_/0j3hmy3x2l799l9z2zglgn3r0000gr/C/org.gnu.Emacs/com.apple.metal/AMD Radeon HD - FirePro D500/functions.maps
11
/private/var/folders/s_/0j3hmy3x2l799l9z2zglgn3r0000gr/C/org.gnu.Emacs/com.apple.metal/AMD Radeon HD - FirePro D500/functions.data
12
/Users/dir/Library/Saved Application State/org.gnu.Emacs.savedState/windows.plist
13
/Users/dir/Library/Saved Application State/org.gnu.Emacs.savedState/window_1.data
15
/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Resources/HIToolbox.rsrc
16
/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Resources/English.lproj/Localized.rsrc
Antworten