PyQt создает отдельное окно для кнопки - PullRequest
2 голосов
/ 15 мая 2019

Привет, недавно я начал экспериментировать с библиотекой PyQt5 GUI, поскольку Tkinter выглядит не очень современно или красиво.Я пытаюсь создать очень простое окно с кнопкой, но по какой-то причине оно открывает новое окно для кнопки.Как я могу решить это?Вот код:

from PyQt5 import QtWidgets

app = QtWidgets.QApplication([])

window = QtWidgets.QWidget()
window.setGeometry(0, 0, 500, 300)
window.setWindowTitle("UI")
window.show()


btn = QtWidgets.QPushButton("Test")
btn.resize(100,100)
btn.move(100,100)
btn.show()


(app.exec_())

Я знаю, что я должен использовать классы для GUI, но я хотел бы изучить основы, прежде чем я начну это делать.

1 Ответ

1 голос
/ 15 мая 2019

Чтобы виджет, такой как QPushButton, был частью окна, виджет должен быть выполнен:

  1. быть дочерью окна или
  2. будь ребенком какого-то ребенка из окна или
  3. это часть макета, которая принадлежит окну.

В вашем случае QPushButton не встречает ничего из этого, поэтому это будет новое окно. Так что это можно решить с помощью правила 1 или 3:

import sys
from PyQt5 import QtWidgets

if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)

    window = QtWidgets.QWidget()
    window.setGeometry(0, 0, 500, 300)
    window.setWindowTitle("UI")

    btn = QtWidgets.QPushButton("Test", window)
    btn.resize(100,100)
    btn.move(100,100)

    window.show()

    sys.exit(app.exec_())

Или:

import sys
from PyQt5 import QtWidgets

if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)

    window = QtWidgets.QWidget()
    window.setGeometry(0, 0, 500, 300)
    window.setWindowTitle("UI")

    btn = QtWidgets.QPushButton("Test")

    lay = QtWidgets.QHBoxLayout(window)
    lay.addWidget(btn)
    window.show()

    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...