Когда я нажимаю QPushButton, я хочу изменить текст QTextBrowser

Мой код имеет 2 проблемы.

  1. Я хочу, чтобы QPushButton был выше, чем QTextBrowser.
  • Но я не могу. Вы можете проверить изображение. введите здесь описание изображения.
  1. Когда я нажимаю QPushButton, я хочу изменить текст QTextBrowser.
  • Но у меня ошибка. -› Сообщение об ошибке: объект «MyApp» не имеет атрибута «text_area»

Это мой код. Я думаю, что у меня нет процесса программирования на Python.

# test.py
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QTextBrowser

class MyApp(QWidget):

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

    def initUI(self):
        btn2 = QPushButton(self)
        btn2.setText('Button&2')
        btn2.setGeometry(20,20,100,100)
        btn2.clicked.connect(self.callme)

        # Add QTextBrowser
        text_area = QTextBrowser(self)
        text_area.setGeometry(120, 160, 270, 120)
        text_area.setText('Before Edit')

        vbox = QVBoxLayout()
        vbox.addWidget(btn2)

        self.setLayout(vbox)
        self.setWindowTitle('QPushButton')
        self.setGeometry(200, 200, 500, 600)
        self.show()

    def callme(self):
        self.text_area.setText('After Edit')

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

person Yoon    schedule 13.01.2021    source источник


Ответы (1)


По сути, проблема в том, что вы использовали text_edit вверху, а self.text_edit внизу. Затем, чтобы поместить кнопку вверху, установите выравнивание vbox по верху, используя vbox.setAlignment(Qt.AlignTop)

Попробуй это:

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QTextBrowser

class MyApp(QWidget):

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

    def initUI(self):
        btn2 = QPushButton(self)
        btn2.setText('Button&2')
        btn2.setGeometry(20,20,100,100)
        btn2.clicked.connect(self.callme)

        # Add QTextBrowser
        self.text_area = QTextBrowser(self)
        self.text_area.setGeometry(120, 160, 270, 120)
        self.text_area.setText('Before Edit')

        vbox = QVBoxLayout()
        vbox.addWidget(btn2)
        vbox.setAlignment(Qt.AlignTop)

        self.setLayout(vbox)
        self.setWindowTitle('QPushButton')
        self.setGeometry(200, 200, 500, 600)
        self.show()

    def callme(self):
        self.text_area.setText('After Edit')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())
person The Pilot Dude    schedule 13.01.2021