Widget ausblenden/beenden

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
BlackJack

@Robokopp: An was und wie hast Du den Namen `exit` denn vor dieser Zeile gebunden?

Ich habe so ein bisschen das Gefühl, dass GUI noch nicht Deine Baustelle ist -- dir fehlen noch Grundlagen in der Sprache selbst.
Robokopp
User
Beiträge: 64
Registriert: Mittwoch 3. November 2010, 12:04

Ok
Also bei mir geht jetzt eigentlich alles, was ein separates Fenster öffnet.About, Help und Exit (was ich als eigene Methode definieren musste)

Das mit dem Aufruf von Newgrp, Delgrp usw kann ja garnicht mehr gehen weil ich das jetzt alles im StackedWidget drin hab^^

Wie änder ich da jetzt die angezeigte Seite?

mit

Code: Alles auswählen

self.ui.newgrp.connect.stackedWidget.setCurrentIndex(self, 2)
gehts nicht

mit aufruf der Methode newgrp, welche das beinhaltet:

Code: Alles auswählen

self.stackedWidget.setCurrentIndex(self, 2)

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

Also Doku lesen musst Du schon mal lernen:
http://doc.qt.nokia.com/4.7/qstackedwid ... rentWidget

Ist doch sehr einfach zu finden!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Robokopp
User
Beiträge: 64
Registriert: Mittwoch 3. November 2010, 12:04

Ja hab ich doch
daher hab ich ja auch das setCurrentIndex

bekomme aber folgenden Fehler

QStackedWidget.setCurrentIndex(int): argument 1 has unexpected type 'MainWindow'

Edit:

Hab das self mal weggelassen

self.stackedWidget.setCurrentIndex(2)

Jetzt ist der Fehler weg aber der Index wird trotzdem nicht gewechselt
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Robokopp hat geschrieben:Ja hab ich doch
Aber offensichtlich nicht verstanden:
Doku hat geschrieben: the currently shown widget can be retrieved using the currentWidget() function, and altered using the setCurrentWidget() function.
Robokopp hat geschrieben: daher hab ich ja auch das setCurrentIndex
s.o. ;-)
Robokopp hat geschrieben: bekomme aber folgenden Fehler

QStackedWidget.setCurrentIndex(int): argument 1 has unexpected type 'MainWindow'
Wie BlackJack schon schrieb, mangelt es Dir an Basiswissen und Erfahrung:
"unexpected type" und dazu der Typ sagt Dir doch, dass Dein Aufruf falsch ist, da Du einen Typen übergibst, der nicht erwartet wird. In diesem Falle übergibst Du ein MainWindow-Objekt, die Funktion erwartet aber einen Integer.

Solche Fehler kann man leicht selber finden.
Robokopp hat geschrieben: Hab das self mal weggelassen

self.stackedWidget.setCurrentIndex(2)
Wie kommst Du überhaupt darauf, da ein self zu übergeben?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Robokopp
User
Beiträge: 64
Registriert: Mittwoch 3. November 2010, 12:04

Naja vlt macht mir das UI File jetzt auch einen Strich durch die Rechnung
Hab mir noch mal ein Example dazu hergenommen.Dort ist alles soweit logisch, aber ich kann es nicht auf meinen Code anwenden


Ka wie ich auf das self komme
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Robokopp hat geschrieben:Naja vlt macht mir das UI File jetzt auch einen Strich durch die Rechnung
Wenn man die falsche Funktion für eine gewünschte Auswirkung nimmt, ist man selber dran schuld ;-)

Schau Dir noch mal meinen Quote aus der Doku genau an. Das wichtige Wort ist sogar hervrogehoben. Dazu habe ich im Post davor sogar auf die korrekte Funktionsbeschreibung in der Doku verlinkt (Ist eben ganz unten auf der Seite, daher scrollt es nicht bis an den oberen Rand; der Name des Ankers ist aber aussagekräftig genug imho).
Robokopp hat geschrieben: Ka wie ich auf das self komme
Du musst da versuchen zu kapieren, was ein "self" an sich bedeutet. Man übergibt das ja nicht planlos!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Robokopp
User
Beiträge: 64
Registriert: Mittwoch 3. November 2010, 12:04

Danke, habs auch so hinbekommen ;)
Läuft jetzt alles soweit

Ja dieses self....schon seltsam^^
In manchen Fällen kann ich die Bedeutung erahnen, aber manchmal wirds wirr
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Robokopp hat geschrieben:Danke, habs auch so hinbekommen ;)
Läuft jetzt alles soweit
Und wie?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Robokopp
User
Beiträge: 64
Registriert: Mittwoch 3. November 2010, 12:04

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui, uic

from PyQt4.uic import loadUi


class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        #Window description
        self.ui = loadUi("happybirthday.ui")
        self.ui.show()
        MainWindow.stackedWidget=QtGui.QStackedWidget(self)
        self.ui.stackedWidget.setCurrentIndex(0)
               
        #Button function
        self.ui.exit.triggered.connect(self.close)
        self.ui.about.triggered.connect(self.about)
        self.ui.help.triggered.connect(self.help2)

        #Button Slots
        self.ui.newgrp.clicked.connect(self.newgrp)
        self.ui.editgrp.clicked.connect(self.edgrp)
        self.ui.delgrp.clicked.connect(self.delgrp)
        self.ui.settings.triggered.connect(self.settingsm)
        self.ui.back.triggered.connect(self.index0)
        self.ui.back2.clicked.connect(self.index0)
        
        
    def index0(self):
        self.ui.stackedWidget.setCurrentIndex(0)    
        
    def close(self): 
        sys.exit(app.exec_())

    def newgrp(self):
        
        self.ui.stackedWidget.setCurrentIndex(1)

    def edgrp(self):
        self.ui.stackedWidget.setCurrentIndex(2)
        self.ui.commandLinkButton.clicked.connect(self.overview)
        
        
    def overview(self):
        self.overview=QtGui.QWidget(self)
        self.setWindowTitle("Entrylist")
        self.resize(800,400)
        
        self.show()
            
        
    def delgrp(self):
        self.ui.stackedWidget.setCurrentIndex(3)

    def settingsm(self):
        self.settingsm = QtGui.QWidget(self)
        self.setWindowTitle("Settings")
        self.resize(800,400)
        self.show()

    def help2(self):
        QtGui.QMessageBox.information(self, "Introduction of use:\n",
                 "1.Create a new group for example:\n"
                 "Girls or Boys. Friends or business partners\n"
                 "2.Chose the dialing numbers, you wish to use\n"
                 "3.Create your own unpersonal greeting message\n"
                 "4.Save your group")

    def about(self):
        QtGui.QMessageBox.about(self, "About",
                "This program sends automatically short messages to\n"
                "the people from your calendar, who have birthday.\n"
                "Please be careful if you don´t have any sms flat.\n "
                "It may cause high costs!!\n"
                "This app was written by M.K.")

app = QtGui.QApplication(sys.argv)
main = MainWindow()
#main.show()
sys.exit(app.exec_())
UI-File
http://paste.pocoo.org/show/338261/

Sieht auch auf meinem N900 schon recht akzeptabel aus :)

Bild

Uploaded with ImageShack.us
Bild

Uploaded with ImageShack.us

Bild

Uploaded with ImageShack.us
Antworten