Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.python > #5747

Re: [Python-de] Re: New overriden and generated QLineEdit class will

Newsgroups de.comp.lang.python
Date 2021-10-09 10:54 -0700
References <22626993-ba87-4fb8-8a7d-b8c022a3e30en@googlegroups.com> <2024386.nlPfB5tcfk@xrated> <61d705ff-d5cc-4b08-bd26-af0af09a8a64n@googlegroups.com> <2489059.7TxBIyBedf@xrated>
Message-ID <5fe0c3bb-3c6c-4b77-9392-4aedc5666e28n@googlegroups.com> (permalink)
Subject Re: [Python-de] Re: New overriden and generated QLineEdit class will
From Mohsen Owzar <mohsen.owzar@gmail.com>

Show all headers | View raw


Hi Hans-Peter

> okay, auf ein Neues. Zuvor ein kurzer Hinweis: ich vermute, Du hast noch nicht 
> so viel Erfahrung im Umgang mit Email in solchen Foren, und ich möchte Dir 
> auch nicht vor den Kopf stoßen, aber im Prinzip tust Du es aber mit Deinen 
> Lesern.. Ohne jetzt groß und breit die Netiquette zu erklären, hier ein 
> Auszug: Zitieren durch Einrücken (mit "> " vor jeder Zeile – und ohne 
> Veränderung des Wortlautes) und Weglassen überflüssiger Informationen (Nicht 
> immer alles zitieren!)

Ja, da hast Du völlig Recht. Ich habe nicht so viel Erfahrung mit den Foren.
Mit dem Zitieren und das Code-Einfügen habe ich noch nicht ganz richtig kapiert.
Weil das Editieren auf dem Browser ziemlich nervtötend und umständlich ist,
schreibe ich zuerst meine Frage im Word, wo eine Schreib-Korrektur auch dabei ist.
Und wenn ich mit dem Text fertig bin, mache ich wieder mit einem «CUT & PASTE»
den Text in den Browser-Editor hinein.
Um Textpassagen zitieren zu können, bringe ich die Passagen auch durch «CUT & PASTE»
aus dem Browser in Word und schreibe ich meinen Text noch dazu.
Dabei füge ich am Anfang der zitierten Zeilen noch ein «>» hinzu.
Ich wusste nicht, dass man beim «Allen Antworten» in dem zitierten Text-Bereich
auch editieren kann. Ich dachte, dass ich immer meine Sachen am Ende hinzufügen muss.
Meinen Lesern wollte ich wirklich nicht vor den Kopf stossen.
Man lernt nie aus!!

> Jetzt kenne ich Deine Aufgabe und einige Ideen, weiß ich aber immer noch 
> nicht, wo genau Dein Problem liegt? Vielleicht liegt es ja an mir. Ich bin ja 
> schon ein ziemlich alter Knochen. Also hilf mir, Dein spezifischen Problem zu 
> verstehen. So etwas wie: ich erwarte dieses Verhalten, bekomme aber jenes 
> Verhalten.

Mein Problem ist ganz einfach. Jetzt wiederhole ich noch einmal Schritt für Schritt.
Wenn ich mein Programm starte, muss in meinem Beispiel-Programm das Fenster mit dem Namen:
«MainWindow namens Window1» erscheinen, das sich darauf nur ein Widget und zwar den frisierten QLineEdit oder besser gesagt die Klasse CustomLineEdit beherbergt.
oder in meinem wirklichen Programm beim Start, zuerst das Haupt-Fenster (MainWindow https://imgur.com/I1Fdf2f)) erscheint und man erst dann beim Klick auf den Button «Setting» auf das Setting-Fenster (Settings-GUI: https://imgur.com/Ot1OF4J) gelangt.
An dieser Stelle haben wir jetzt die gleiche Situation im Beispiel-Code und im wirklichen Code, mit einem Unterschied, dass im Beispiel-Code im «Window 1» kein LineEdit-Feld zu sehen ist, wenn man die «Zeile 12» im Code auskommentiert. Und wenn man die «Zeile 12» drin lässt, erscheint dieses Edit-Feld beim Start des Beispiel-Codes daraussen, was nicht korrekt ist.
Wenn man dieses Verhalten auf meinen wirklichen Code übertragen würde, würde es bedeuten, dass das Settings-Fenster gar keine Edit-Felder hat, da sie sich ausserhalb des Settings-Fenster und auf derselben Ebene  befinden.
Aber im wirklichen Code auf dem Settings-Fenster kannst Du alle QLineEdit-Felder sehen. Hier sind sie noch normale und nicht überladene Widgets wie in meinem Beispiel-Code. Erst wenn mein Beispiel-Code funktioniert, werde ich dieses Verhalten auch auf das Settings-Fenster übertragen.

> Du kannst Objekte in .show() und .hide() sichtbar machen und wieder 
> verstecken.

Das ist mir klar und die Show()-Methode habe ich auch auf Zeile 12 verwendet.
Diese Zeile dürfte dort überhaupt nicht da sein.
Diese show()-Methode befindet sich auch auf "Zeile 49"  und sollte dafür sorgen, dass MainWindow (Window 1) erscheint mit einer instanziierten überladenen QLineEdit-Klasse darauf.
Starte bitte den Beispiel-Code und sieh, dass ein leeres "Window 1"-Fenster erscheint.
Und wenn man die Zeile 12 drin lässt, erscheint ein leeres Fenster mit einem Edit-Feld parallel dazu auf derselben Ebene.


Unten ist ein Teil Deiner ersten Antwort über Parent und die Initialisierng.
===========================================================
> Okay, hier sagst du, du willst dein widget im mainWindow platzieren.

> Das macht man üblicherweise mit einer parent/child relationship. Da du aber in
> der Ableitung deiner Klasse diese *aller* Argumente beraubt hast, geht dir
> damit dieser Mechanismus (parent=..) verloren. Vielleicht nimmst Du mal dein
> __init__() ganz raus, dann solltest Du die default Signatur zurückbekommen,
> und kannst parent auch wieder setzen. 

An dieser Stelle sind meine Groschen nicht gefallen.
Ich verstehe nicht die "Beraubung" "*aller*" Argumente und wie habe ich es angestellt.
Wie habe ich es beraubt und wie hätte ich es machen müssen?
Das hat mit dem Problem zu tun, dass ich immer noch nicht die Verwendung von Parent bei der Initialisierung von Klassen verstanden habe.
Deine Beschreibung zu diesem Thema war wirklich gut. Solange ich aber keien Beispiele sehe, tappe ich im Dunkel herum.
Wenn Du zwei, drei kleine Code-beispiele hättest, die zeigen, wie und wo man Parent verwendet, bin Ich Dir Tausend Mal dankbar.

Und hier versuche ich den Code mit den richtigen Einrückungen einzufügen:
Nachdm ich gerade den Code eingefügt habe, sieht alles sehr gut aus. 
Die Einrückungen sind alle vorhanden.
Ich weiss nicht, ob sie auch so bleiben, wenn ich auf die Schaltfläche "Nachricht posten" drücke.

Hans-Peter, ich hoffe jetzt, dass Du ein bisschen mehr Information zu meinem Problem hast, um mir weiterzuhelfen.

Gruss
Mohsen
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
import sys
from PyQt5.QtWidgets import (QApplication, QLineEdit, QPushButton, QMainWindow,
                             QVBoxLayout, QHBoxLayout, QGridLayout, QWidget)
from PyQt5.QtCore import pyqtSignal, pyqtSlot

class CustomLineEdit(QLineEdit):
    clicked = pyqtSignal()

    def __init__(self):
        super().__init__()

        self.show()

    def mousePressEvent(self, QMouseEvent):
        self.clicked.emit()


class MainWindow(QMainWindow):
    def __init__( self, parent=None ):
        super().__init__(parent)

        self.title = 'Window 1'
        self.left = 700
        self.top = 300
        self.width = 200
        self.height = 200
        self.initUI()

    def initUI(self):

        self.keypad_window = Keypad_Window(self)

        hbox = QHBoxLayout()

        self.cle = CustomLineEdit()
        self.cle.clicked.connect(self.show_keypad_window)
        self.cle.setFixedSize(220, 60)
        self.cle.setStyleSheet("color: red;"
                               "background-color: yellow;"
                               "font-family: Arial;"
                               "font-weight: Bold;"
                               "font-size: 30pt")

        hbox.addWidget(self.cle)
        self.setLayout(hbox)

        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.show()

    def show_keypad_window(self):
        self.keypad_window.show()
        self.hide()

    def close(self):
        self.keypad_window.close()
        super(MainWindow, self).close()

    @pyqtSlot(str)
    def update_label(self, txt):
        self.cle.setText(txt)

class Keypad_Window(QWidget):
    def __init__(self, parent=None):
        super().__init__()
        self.parent = parent

        self.setGeometry(1200, 500, 230, 400)

        vbox = QVBoxLayout()
        self.display = QLineEdit()
        self.display.setFixedSize(220, 60)
        self.display.setReadOnly(True)
        self.display.setStyleSheet("color: Blue; "
                                   "background-color: lightgreen;"
                                   "font-family: Arial;"
                                   "font-weight: Bold;"
                                   "font-size: 18pt")
        vbox.addWidget(self.display)

        """Create the buttons."""
        self.buttons = {}
        self.gridlay = QGridLayout()

        self.button_name = [['7', '8', '9'],
                            ['4', '5', '6'],
                            ['1', '2', '3'],
                            ['C', '0', '>']]

        self.command_name = [['7', '8', '9'],
                             ['4', '5', '6'],
                             ['1', '2', '3'],
                             ['delete', '0', 'accept']]

        for i in range(4):
            for j in range(3):
                text = self.button_name[i][j]

                # keep a reference to the buttons
                self.buttons[i, j] = QPushButton()
                self.buttons[i, j].setText(text)
                self.buttons[i, j].setObjectName(text)
                self.buttons[i, j].setFixedSize(70, 70)
                if i == 3:
                    if j == 0:
                        self.buttons[i, j].setToolTip('Each click deletes\na digit to the left')

                    if j == 2:
                        self.buttons[i, j].setToolTip('The whole displayed\nvalue will be taken!')


                self.buttons[i, j].clicked.connect(self.call_button_fun(i, j, self.command_name))

                # add to the GridLayout
                self.gridlay.addWidget(self.buttons[i, j], i, j)
                self.buttons[i, j].setStyleSheet("color: blue; "
                                                 "background-color: cyan;"
                                                 "font-family: Arial;"
                                                 "font-weight: Bold;"
                                                 "font-size: 20pt")
        vbox.addLayout(self.gridlay)
        self.setLayout(vbox)

    def call_button_fun(self, i, j, command_name):
        def button_fun():
            if command_name[i][j] == self.button_name[i][j]:
                displayed_text = self.display.text()
                self.new_text = displayed_text + self.button_name[i][j]
                self.display.setText(self.new_text)

            if command_name[i][j] == 'accept':
                print('>-key pressed!')
                self.parent.cle.setText(self.new_text)
                self.close()

            if command_name[i][j] == 'delete':
                print('C-key pressed!')
                self.display.setText('')

        return button_fun

if __name__ == "__main__":
    app = QApplication(sys.argv)
    mainwindow = MainWindow()

    # Exception abfangen, wenn sie nicht behandelt wurde
    sys._excepthook = sys.excepthook

    def exception_hook(exctype, value, traceback):
        print(exctype, value, traceback)
        sys._excepthook(exctype, value, traceback)
        sys.exit(1)

    sys.excepthook = exception_hook

    sys.exit(app.exec_())

Back to de.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

New overriden and generated QLineEdit class will not be placed on the MainWindow as expected Mohsen Owzar <mohsen.owzar@gmail.com> - 2021-10-08 02:14 -0700
  [Python-de] Re: New overriden and generated QLineEdit class will not Lars Liedtke <liedtke@punkt.de> - 2021-10-08 12:20 +0200
  [Python-de] Re: New overriden and generated QLineEdit class will not Hans-Peter Jansen <hpj@urpla.net> - 2021-10-08 18:02 +0200
    Re: [Python-de] Re: New overriden and generated QLineEdit class will not Mohsen Owzar <mohsen.owzar@gmail.com> - 2021-10-08 21:10 -0700
      [Python-de] Re: New overriden and generated QLineEdit class will Hans-Peter Jansen <hpj@urpla.net> - 2021-10-09 15:10 +0200
        Re: [Python-de] Re: New overriden and generated QLineEdit class will Mohsen Owzar <mohsen.owzar@gmail.com> - 2021-10-09 10:54 -0700
          Re: [Python-de] Re: New overriden and generated QLineEdit class will Mohsen Owzar <mohsen.owzar@gmail.com> - 2021-10-09 11:07 -0700
            [Python-de] Re: New overriden and generated QLineEdit class will Marco Bakera <pintman@bakera.de> - 2021-10-10 09:23 +0200
          [Python-de] Re: New overriden and generated QLineEdit class will Hans-Peter Jansen <hpj@urpla.net> - 2021-10-10 18:39 +0200
            Re: [Python-de] Re: New overriden and generated QLineEdit class will Mohsen Owzar <mohsen.owzar@gmail.com> - 2021-10-10 13:36 -0700
              [Python-de] Re: New overriden and generated QLineEdit class will Hans-Peter Jansen <hpj@urpla.net> - 2021-10-11 12:22 +0200
                Re: [Python-de] Re: New overriden and generated QLineEdit class will Mohsen Owzar <mohsen.owzar@gmail.com> - 2021-10-11 04:47 -0700

csiph-web