Seite 1 von 1

About Fenster öffnen

Verfasst: Mittwoch 2. März 2016, 05:41
von beli3ver
Hallo,

ich bin relativ neu in der Python Programmierung. Ich habe mir ein kleines Programm mit Qt erstellt. Jetzt wollte ich, wenn man auf den Menüpunkt About klickt, dass sich ein kleines Fenster wie bei anderen Programmen öffnet, wo dann die wichtigsten Informationen drinnen stehen. Leider stehe ich gerade total auf dem Schlauch und weiß nicht, wie ich das am besten machen kann.

Code: http://pastebin.com/e7GKRXaF

Re: About Fenster öffnen

Verfasst: Mittwoch 2. März 2016, 09:09
von Madmartigan
QMessageBox besitzt eine about Funktion. Das wäre die einfachste Variante.
http://doc.qt.io/qt-4.8/qmessagebox.html#about

Du kannst natürlich auch einfach ein eigenen Dialog bzw. ein eigenes Fenster erstellen und dann (modal) anzeigen, wenn der User auf "About" klickt.

Re: About Fenster öffnen

Verfasst: Mittwoch 2. März 2016, 09:47
von BlackJack
@beli3ver: Das Programm enthält einen Syntaxfehler ziemlich am Ende. Die `newContactWindow()`-Funktion sieht auch aus als hätte da jemand mitten in einem Namen aufgehört zu schreiben. Es darf auch nur ein `QApplication`-Exemplar pro Programm erstellt werden, denn dieses Objekt stellt *das* Programm aus Qt-Sicht dar.

Auf Modulebene gibt es keinen Namen `app`. Steigst Du eventuell mit Qt-Programmierung ein, ohne die Python-Grundlagen verinnerlicht zu haben? Funktionen, Klassen, Namensräume/Gültigkeits- und Sichtbarkeitsbereiche von Namen sind wichtig und gelten unabhängig von Qt in allen Python-Programmen gleich. Falls Du noch kein Grundlagentutorial durchgearbeitet hast, solltest Du das nachholen. Mindestens parallel zu dem Projekt was Du umsetzen möchtest.

Klassennamen fangen mit einem Grossbuchstaben an. Wirf mal einen Blick in den Style Guide for Python Code. Der gilt bei GUI-Rahmenwerken deren Namen sich nicht an diese Richtlinien halten weil die Namen dort von einer anderen Programmiersprache kommen (bei Qt ist das C++) nicht so strikt und uneingeschränkt für den Code der das Rahmenwerk verwendet, aber in der Programmlogik sollte man sich auch in solchen Programmen dann wieder an die Python-Konventionen halten. Bei Klassennamen sind sich die Konventionen von Python und Qt aber einig: nicht mit Kleinbuchstaben anfangen. Denn dann bekommt man Probleme wie man ein Exemplar von der Klasse `mainWindow` nennen soll, weil man die nicht `mainWindow` nennen kann. Wenn die Klasse `MainWindow` heisst, dann kann man das aber. Auf jeden Fall sollte man es nicht `ex` nennen, wo der Leser dann rätseln darf ob das für `example`, `exemplar`, oder ganz was anderes stehen mag. :-)

Das Hauptfenster sollte sich beim Initialisieren nicht selber anzeigen. Das macht kein anderes Widget, weil man damit dem Aufrufer die Freiheit nimmt die Entscheidung zu treffen ob und wann das Widget angezeigt werden soll.

Code: Alles auswählen

#!/usr/bin/env python
from __future__ import absolute_import, division, print_function
import sys
from PyQt4 import QtGui


class MainWindow(QtGui.QMainWindow):
    
    def __init__(self):
        super(MainWindow, self).__init__()
                
        newAction = QtGui.QAction(
            QtGui.QIcon('images/file_new.png'), '&New', self
        )
        newAction.setShortcut('Ctrl+N')
        newAction.setStatusTip('Create new entry')

        exitAction = QtGui.QAction(
            QtGui.QIcon('images/exit.png'), '&Exit', self
        )
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(QtGui.qApp.quit)

        infoAbout = QtGui.QAction(QtGui.QIcon('images/star.png'), 'About', self)
        infoAbout.setStatusTip('All infos about this project')
        infoAbout.triggered.connect(self.on_about)
        infoLicence = QtGui.QAction(
            QtGui.QIcon('images/gnome-contacts.png'), '&Licence', self
        )
        infoLicence.setStatusTip('MIT')

        self.statusBar()

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(newAction)
        fileMenu.addAction(exitAction)
        infoMenu = menubar.addMenu('&Info')
        infoMenu.addAction(infoAbout)
        infoMenu.addAction(infoLicence)
        
        self.setGeometry(500, 500, 500, 400)
        self.setWindowTitle(QtGui.qApp.applicationName())

    def on_about(self):
        QtGui.QMessageBox.about(
            self,
            u'About {0} v{1}'.format(
                QtGui.qApp.applicationName(), QtGui.qApp.applicationVersion()
            ),
            '<b>Some</b> <i>Text</i>...<p>'
            'Some more text describing the program...'
        )

  
def main():
    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('qBook')
    app.setApplicationVersion('0.1')
    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

Re: About Fenster öffnen

Verfasst: Mittwoch 2. März 2016, 12:38
von beli3ver
Danke BlackJack.
Es ist etwas her, dass ich Python gemacht habe, denke das hei rmein Problem ist, dass ich von der PHP Programmierung komme. Mach das Projekt auch, um in Python mich wieder zu vertiefen.
Ich möchte halt ein kleines, Adressbuch schreiben, dass mit vcards anlegt. Habe da mich in den letzten Tagen viel belesen und habe jetzt mich halt für Qt entschieden.
Danke das ich da noch einige Fragen haben werde, oder kennt ihr ein gutes Tutorial für Qt?
Hast du vielleicht auch ein gutes Python Grunlagentutorial, dass ich mich nicht so ganz blamiere hier :-)

Re: About Fenster öffnen

Verfasst: Mittwoch 2. März 2016, 14:11
von BlackJack
@beli3ver: In der Python-Dokumentation gibt es ein Tutorial. Und bei Qt ist die Qt-Dokumentation sehr umfangreich. Das ist nicht nur API-Referenz sondern die Dokumentation enthält auch Texte über grössere Zusammenhänge, also wie verschiedene Klassen zusammenspielen, und auch einige Beispielprogramme.

Re: About Fenster öffnen

Verfasst: Mittwoch 2. März 2016, 14:32
von beli3ver
Danke für die Tipps, werde es mir mal anschauen.
Macht es eigentlich noch Sinn mit der Syntax ovn Python 2 zu beschäftigen?

Re: About Fenster öffnen

Verfasst: Mittwoch 2. März 2016, 15:21
von BlackJack
@beli3ver: Also mal davon abgesehen das die Syntax zwischen 2 und 3 bis auf ein paar kleine Änderungen identisch sind, stellt sich diese Frage IMHO nicht wirklich. Da immer noch deutlich mehr Python 2-Quelltexte im Netz zu finden sind, lohnt es sich auch bei Python 3 diesen Code lesen zu können.

Ansonsten setzen nicht wenige Python 2 immer noch produktiv ein. Die Mehrzahl der stabilen Webserver dürfte beispielsweise immer noch Python 2 als Standardpython haben. Ich kann jedenfalls aus beruflichen Gründen noch nicht auf Python 3 umsteigen und setze deshalb auch privat weiterhin auf Python 2. Der Umstieg bringt mir einfach nicht viel, ausser Arbeit und ich ärgere mich an einigen Stellen wie Python 3 mit Gewalt versucht Bytes als Unicode-Zeichenketten zu behandeln wo das nicht immer geht. Dateinamen und Kommandozeilenargumente sind unter Linux beispielsweise Byteketten. Und wenn die kein Text in der Kodierung sind, die Python 3 geraten hat, dann hat man Probleme.