Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.python > #5742
| From | Hans-Peter Jansen <hpj@urpla.net> |
|---|---|
| Newsgroups | de.comp.lang.python |
| Subject | [Python-de] Re: New overriden and generated QLineEdit class will not |
| Date | 2021-10-08 18:02 +0200 |
| Message-ID | <2024386.nlPfB5tcfk@xrated> (permalink) |
| References | <22626993-ba87-4fb8-8a7d-b8c022a3e30en@googlegroups.com> |
Am Freitag, 8. Oktober 2021, 11:14:54 CEST schrieb Mohsen Owzar:
> Hi all
> I have a question about a clickable QLineEdit.
> After searching some Hints, how to use QMouseEvent, I've written a program
> which is working almost good but with a small or perhaps big ugliness and
> that is: Below is the imgur link to the screenshots of my program after
> clicking the buttons in sequence: https://imgur.com/a/rfcP3qB
Ich schätze, wir können an diesem Punkt in deutsch weitermachen.
Vielleicht solltest Du erst mal versuchen, dein Problem möglichst kurz zu
formulieren. Ich kann hier nur eine Ablaufbeschreibung finden.
> As you will see in the code blow,
Ein whitespace damaged code ist ziemlich unbrauchbar, you know..
> I override the QlineEdit widget and define
> a new class " CustomLineEdit " to generate a "clicked" signal, when the
> user pressed with mouse on this field. I use this "CustomLineEdit" class
> and place it on the MainWindow with the desired "layout". I couldn't figure
> out, why this widget is placed not in the MainWindow, but outside this
> window, as you can see in the top picture of the attached screenshots.
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.
> When
> I take the line 12 (self.show()) from the code, the generated class will
> not appear. The problem here is that at the beginning, the MainWindow with
> a LineEdit field should appear at the program start. Then, after clicking
> on this field, the keypad should come up outside the MainWindow.
Hier widersprichst du dir. Aber ich glaube, ich habe dein Problem trotzdem
richtig interpretiert.
Schau mal in die PyQt Beispiele, da solltest du alle Arten von subclassing,
event handling, und so finden. Wichtig sind da noch die return codes aus den
event handlern..
Gutes Gelingen.
Cheers,
Pete
> Could
> anyone see, where my mistake is?
> Thanks for any help.
> Mohsen
> Here is the code:
> &&&&&&&&&&&&&&&&&&&&&&&&&&&
> 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_())
> _______________________________________________
> python-de Mailingliste -- python-de@python.org
> Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an
> python-de-leave@python.org
> https://mail.python.org/mailman3/lists/python-de.python.org/
> Mitgliedsadresse: hpj@urpla.net
Back to de.comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar
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