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

Lars Liedtke <liedtke-mjUko/[email protected]>
Newsgroups gmane.comp.python.general.german
Organization punkt.de GmbH
Message-ID <[email protected]>
Dear Mohsen,

You have contacted the German Python mailinglist, so almost all
conversations on here are held in German. If you'd like to communicate
in English, it might be a good idea to contact the general Python
mailinglist, whose main language is English. You can connnect to the
general list under [email protected].

Unfortunately I cannot help you with your Problem, but I am sure there
are people knowing QT in conjunction with Python.

Best Regards

Lars

Am 08.10.21 um 11:14 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 
> As you will see in the code blow, 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. 
> 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. 
> 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 -- [email protected]
> Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an [email protected]
> https://mail.python.org/mailman3/lists/python-de.python.org/
> Mitgliedsadresse: [email protected]

-- 
punkt.de GmbH
Lars Liedtke
.infrastructure

Kaiserallee 13a	
76133 Karlsruhe

Tel. +49 721 9109 500
https://infrastructure.punkt.de
[email protected]

AG Mannheim 108285
Geschäftsführer: Jürgen Egeling, Daniel Lienert, Fabian Stein


_______________________________________________
python-de Mailingliste -- [email protected]
Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an [email protected]
https://mail.python.org/mailman3/lists/python-de.python.org/
Mitgliedsadresse: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.