Checkboxes in QT

Alles rund um die Programmierung mit Qt
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Checkboxes in QT

Beitrag von franzf »

Klar ist die Doku aus den selben Quellen erstellt. Nur ist die PyQt4-Doku für den Python-Programmierer angenehmer, weil der nicht mit Zeigern, Referenzen etc. bombardiert wird.
Trotzdem ist die PyQt4-Doku immer noch etwas komisch, da viele Beispiele in C++ sind (einfach mal bei QListWidget in die Detailed Description reinschauen). Auch Funktionsüberladungen gibt es in Python nicht, weshalb die ganzen QListWidget.addItem mehr als komisch ausschauen. Und vieles steht gar nicht so in der Doku. Ich hatte mal versucht, in PyQt4 ein Layout durch ein anderes auszutauschen, und hab mich halb krank geärgert (dachte schon mein PyQt4 ist kaputt) - bis ich die Lösung in der Verwendung des sip-Moduls gefunden habe - kein Wort dazu in der PyQt4-Doku, stattdessen nur unverständlicher (aus Pythonprogrammierersicht) C++-Code...

Aus dem Grund haben PyQt4-Programmierer bei mir nen kleinen Bonus ;)
sublist
Beiträge: 11
Registriert: 27. April 2012 14:13

Re: Checkboxes in QT

Beitrag von sublist »

Hallo.

ich bin heute mal wieder zu meinem Projekt gekommen.
Mit der Liste klappts leider noch nicht.
Besser gesagt ich weis gar nicht wie ich Zugriff zu der Liste bekomme, die ich im Designer angelegt hab.
Der Objektname der QListWidget heißt bei mir "myList"

Sorry für meine dummen Fragen... Bin halt noch neu im programmieren...

Code: Alles auswählen

import re
from pymel.core import *
from PyQt4 import QtGui, QtCore, uic

ui_filename = 'c:/Users/xxx/Google Drive/Coding/PYTHON/QT/HighScoreList.ui' #pfade checken!!!
logFile = internalVar(uad=True) + 'scriptEditorLogFile.txt'
form_class, base_class = uic.loadUiType(ui_filename)

#Interface Class
class Interface(base_class, form_class):
    def __init__(self):
        super(base_class, self).__init__()
        self.setupUi(self)
        self.setObjectName('Highscorelist')
        self.setDockNestingEnabled(True)
        self.Establish_Connections()

    #Checkboxes
    def recordBox_fn(self, state):
        if state == 0:
            toggleRecording()
            print('logging disabled')
        else:
            toggleRecording(1)
            print('logging enabled')

    def echoAllBox_fn(self, state):
        if state == 0:
            echoAllCommands()
            print('echo all OFF')
        else:
            echoAllCommands(1)
            print('echo all ON')

    def includeSelectBox_fn(self, state):
        if state == 0:
            print('disabled')
        else:
            print('enabled')

    #Button
    def logFileBtn_fn(self):
        print('Logfile cleared')
        global logFile
        open(logFile, "w").close()

    def debugBtn_fn(self):
        print('\n')
        outPutInfos(1,1)
        
    #lists ????

    def Establish_Connections(self):
        #checkboxes
        self.recordBox.stateChanged.connect(self.recordBox_fn)
        self.echoAllBox.stateChanged.connect(self.echoAllBox_fn)
        self.includeSelectBox.stateChanged.connect(self.includeSelectBox_fn)
        #buttons
        self.logFileBtn.clicked.connect(self.logFileBtn_fn)
        self.debugBtn.clicked.connect(self.debugBtn_fn)
        #lists ????

#Main
def main():
    global ui
    ui = Interface()
    ui.background.setPixmap(QtGui.QPixmap('c:/Users/xxx/Google Drive/Coding/PYTHON/QT/logo_dummy.jpg')) #Add Image to Object "Background"
    ui.show()

    # Make Window dockable
    '''
    if dockControl('ui_dock', q=1, ex=1):
        deleteUI('ui_dock')
    floatingLayout = paneLayout(configuration='single', width=213) #Size of Main Window
    allowedAreas = ['left', 'right']
    docControl = dockControl('ui_dock', area=allowedAreas[1], content=floatingLayout, label='Highscorelist')
    control('Highscorelist', e=True, p=floatingLayout)
    '''

if __name__ == "__main__":
    main()
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Checkboxes in QT

Beitrag von franzf »

Besser gesagt ich weis gar nicht wie ich Zugriff zu der Liste bekomme, die ich im Designer angelegt hab.
Der Objektname der QListWidget heißt bei mir "myList"
self.myList sollte es sein - du erbst ja von der ui-Klasse.
sublist
Beiträge: 11
Registriert: 27. April 2012 14:13

Re: Checkboxes in QT

Beitrag von sublist »

Danke. Das mit dem ableiten hört sich logisch an. Nur wo muss das stehen? :roll:

Kann ich dann einfach

Code: Alles auswählen

liste = self.myList
schreiben :oops:

Danke ;)
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Checkboxes in QT

Beitrag von franzf »

sublist hat geschrieben:Danke. Das mit dem ableiten hört sich logisch an. Nur wo muss das stehen? :roll:
Steht doch schon da:

Code: Alles auswählen

class Interface(base_class, form_class):
Das in den Klammern sind die Klassen, von denen Interface erbt.
Und wieso willst du das ListWidget nochmal an eine lokale Variable zuweisen?

Kann es sein dass du mit OOP und insbesondere OOP in Python noch ein wenig Proleme hast? Wie hast du Python gelernt?
sublist
Beiträge: 11
Registriert: 27. April 2012 14:13

Re: Checkboxes in QT

Beitrag von sublist »

Danke für die Infos.

Ich hatte ja schon geschrieben, daß ich OOP nicht behersche. Hab bis jetzt immer nur prozedual programmiert.
Python hab ich mir einfach autodidaktisch beigebracht.

Wegen der Variable:
Ich hatte mir überlegt, den Inhalt des listWidgets zu lokal zu speichen, damit dann zu arbeiten und es dananch wieder zu füllen.
Wüßte jetzt nich wie ich das anders machen sollte.

Code: Alles auswählen

listWidget = self.myList.ContentList
oder

Code: Alles auswählen

listWidget= self.myList.currentItem()
print listWidget.text()
Ich möchte ja Informationen, die ich in einer lokalen Liste habe in das listWidget kopieren. :roll:
Vielleicht mach ich da auch nen Denkfehler.
Wie gesagt is das mein erstes QT Projekt das auch noch OOP verlangt....
sublist
Beiträge: 11
Registriert: 27. April 2012 14:13

Re: Checkboxes in QT

Beitrag von sublist »

Hi Leute.

Bin weiter gekommen...:)
Die Liste funktioniert unter best. Bedingungen. Und das ist auch gleichzeitig mein Problem.
Ich glaub ich habe irgendwie ein Initialisierungsproblem.

Wenn ich den Code wie unten ausführe funktioniert nichts. Kein UI wird angezeigt

Code: Alles auswählen

import re
from pymel.core import *
from PyQt4 import QtGui, QtCore, uic

ui_filename = 'c:/Users/xxx/Google Drive/Coding/PYTHON/QT/HighScoreList.ui' #pfade checken!!!
logFile = internalVar(uad=True) + 'scriptEditorLogFile.txt'
form_class, base_class = uic.loadUiType(ui_filename)

#Interface Class
class Interface(base_class, form_class):
    def __init__(self):
        super(base_class, self).__init__()
        self.setupUi(self)
        self.setObjectName('Highscorelist')
        self.setDockNestingEnabled(True)
        self.Establish_Connections()

    #Checkboxes
    def recordBox_fn(self, state):
        if state == 0:
            toggleRecording()
            print('logging disabled')
        else:
            toggleRecording(1)
            print('logging enabled')

    def echoAllBox_fn(self, state):
        if state == 0:
            echoAllCommands()
            print('echo all OFF')
        else:
            echoAllCommands(1)
            print('echo all ON')

    def includeSelectBox_fn(self, state):
        if state == 0:
            print('disabled')
        else:
            print('enabled')

    #Button
    def logFileBtn_fn(self):
        print('Logfile cleared')
        global logFile
        open(logFile, "w").close()

    def debugBtn_fn(self):
        print('\n')
        outPutInfos(1,1)
        
    def Establish_Connections(self):
        #checkboxes
        self.recordBox.stateChanged.connect(self.recordBox_fn)
        self.echoAllBox.stateChanged.connect(self.echoAllBox_fn)
        self.includeSelectBox.stateChanged.connect(self.includeSelectBox_fn)
        #buttons
        self.logFileBtn.clicked.connect(self.logFileBtn_fn)
        self.debugBtn.clicked.connect(self.debugBtn_fn)
        
    def listWidget(self, listData = []):
        self.myList.clear()
        for i in range(0,len(listData),1):
            item = QtGui.QListWidgetItem(self.myList)
            item.setText(listData[i])

#Main
def main():
    global ui
    ui = Interface()
    ui.background.setPixmap(QtGui.QPixmap('c:/Users/gneumann/Google Drive/Coding/PYTHON/QT/logo_dummy.jpg')) #Add Image to Object "Background"
    ui.listWidget() #init
    listData = outPutInfos(1,1)
    ui.listWidget(listData)
    ui.show()

    # Make Window dockable
    '''
    if dockControl('ui_dock', q=1, ex=1):
        deleteUI('ui_dock')
    floatingLayout = paneLayout(configuration='single', width=213) #Size of Main Window
    allowedAreas = ['left', 'right']
    docControl = dockControl('ui_dock', area=allowedAreas[1], content=floatingLayout, label='Highscorelist')
    control('Highscorelist', e=True, p=floatingLayout)
    '''
Kommentiere ich die Zeilen aus, in denen ich das ListWidget befülle, wird das UI angezeigt

Code: Alles auswählen

listData = outPutInfos(1,1)
ui.listWidget(listData)
Starte ich danach wieder den original Code wird auch das UI mit neuem Inhalt gestartet.

Igendwie funktioniert wohl das befüllen und anzeigen in einem Schritt nicht :roll:

Hat jemand ne Idee was ich falsch mache?

Danke für eure Tips! :)
Antworten