Henry Lu
Henry Lu

Reputation: 45

How to print text beside Editor using PyQt5

I just started to learn how to build a GUI using PyQt5. I trace some example on the internet and trying to create a GUI for practice. But I have a problem when I tried to show a text next to the Editor. I follow the way that I found on the internet but it just not working. can anyone tell me how to fix it?

I comment the part that I am trying to show the text in my code

enter image description here

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import xml.etree.cElementTree as ET

class App(QMainWindow):

def __init__(self):
    super().__init__()
    self.title = 'PyQt5 textbox - pythonspot.com'
    self.left = 10
    self.top = 10
    self.width = 400
    self.height = 200
    self.initUI()

def initUI(self):
    self.setWindowTitle(self.title)
    self.setGeometry(self.left, self.top, self.width, self.height)

    # Create textbox
    self.textbox = QLineEdit(self)
    #self.textbox.setAlignment(Qt.AlignRight)
    self.textbox.move(80, 20)
    self.textbox.resize(200,40)


    self.textbox2 = QLineEdit(self)
    self.textbox2.move(80, 80)
    self.textbox2.resize(200,40)        



    #####################################
    # the part i am trying to show text #
    #####################################  
    txt1 = QLabel("case indes",self)
    txt1.setAlignment(Qt.AlignCenter)

    mytext = QFormLayout()
    mytext.addRow(txt1,self.textbox) # not showing in Aligned position 
    mytext.addRow("Case type",tbox2) # not working




    # Create a button in the window
    self.button = QPushButton('Show text', self)
    self.button.move(20,150)


    # connect button to function on_click
    self.button.clicked.connect(self.on_click)
    self.center()
    self.show()

@pyqtSlot()
def on_click(self):
    textboxValue = self.textbox.text()
    textboxValue2 = self.textbox2.text()
    QMessageBox.question(self, 'Message - pythonspot.com', "You typed: " + textboxValue + " , second msg is: " + textboxValue2, QMessageBox.Ok, QMessageBox.Ok)
    print(textboxValue)
    self.textbox.setText("")
    self.textbox2.setText("")

def center(self):  
    qr = self.frameGeometry()
    cp = QDesktopWidget().availableGeometry().center()
    qr.moveCenter(cp)
    self.move(qr.topLeft())        

if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())

Upvotes: 1

Views: 1747

Answers (1)

eyllanesc
eyllanesc

Reputation: 243973

The layouts are used to manage the position and size of the widgets so you should not use move or resize, you have never established which widget the layout belongs to and finally QMainWindow is a special widget in which you must establish a centralwidget. In the next section there is the solution:

def initUI(self):
    self.setWindowTitle(self.title)
    self.setGeometry(self.left, self.top, self.width, self.height)

    central_widget = QWidget()
    self.setCentralWidget(central_widget)

    # Create textbox
    self.textbox = QLineEdit()
    self.textbox2 = QLineEdit()   

    txt1 = QLabel("case indes",self)
    txt1.setAlignment(Qt.AlignCenter)    

    mytext = QFormLayout(central_widget)
    mytext.addRow(txt1, self.textbox) # not showing in Aligned position 
    mytext.addRow("Case type", self.textbox2) # not working

    # Create a button in the window
    self.button = QPushButton('Show text')
    mytext.addRow(self.button)
    # connect button to function on_click
    self.button.clicked.connect(self.on_click)
    self.center()
    self.show()

Upvotes: 0

Related Questions