PyQt5: прикрепить положение кнопки к координатам окна - PullRequest
0 голосов
/ 30 марта 2020

Итак, я пытаюсь немного поэкспериментировать с PyQt5. Я создал базовое c окно с двумя QPushButtons.

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QSizePolicy
import sys

class Okno(QMainWindow):
    def __init__(self):
        super(Okno, self).__init__()
        self.setGeometry(500, 500, 900, 500)  # window size setGeometry(xpos, ypos, w, h)
        # self.setFixedSize(900, 500) # fix window position
        self.setWindowTitle("My window")
        self.label = QtWidgets.QLabel(self)
        self.button1 = QtWidgets.QPushButton(self)
        self.button2 = QtWidgets.QPushButton(self)
        self.iniUI()

    # Buttons
    def iniUI(self):
        self.button1.setText("Open file")
        self.button1.move(75, 450)
        self.button1.setMinimumWidth(150)
        self.button1.clicked.connect(Button_events.open_file)  # add (connect) button event 

        self.button2.setText("Exit")
        self.button2.move(750, 450)
        self.button2.clicked.connect(exit)

# Button events
class Button_events(QMainWindow):
    def open_file(self):
        print("Open file")

# Main method
def window():
    app = QApplication(sys.argv)
    okno = Okno()
    okno.show()
    sys.exit(app.exec_())


window()

Я установил положение кнопки по абсолютным координатам. Когда я изменяю размер My Window, кнопка просто сохраняет свои абсолютные координаты.

Как я могу прикрепить координаты кнопки к My Window, чтобы при масштабировании окна кнопка двигалась внутри.

Можно ли установить минимальный размер My Window относительно минимального размера QPushButtons (когда кнопки не подходят My Window, его нельзя отрегулировать меньше)?

Вот простой экран того, чего я пытаюсь достичь (оригинальные кнопки будут разрезаны пополам, они исчезнут, если My Window станет меньше):

enter image description here

Спасибо.

1 Ответ

0 голосов
/ 30 марта 2020

Я бы рекомендовал использовать макет для обработки положения всех виджетов и минимального размера окна. С QGridLayout вы можете выровнять кнопки слева внизу и справа внизу.

from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow, QSizePolicy
import sys

class Okno(QMainWindow):
    def __init__(self):
        super(Okno, self).__init__()
        self.setGeometry(500, 500, 900, 500)
        self.setWindowTitle("My window")
        self.label = QtWidgets.QLabel()
        self.button1 = QtWidgets.QPushButton()
        self.button2 = QtWidgets.QPushButton()
        self.iniUI()

    # Buttons
    def iniUI(self):
        w = QtWidgets.QWidget()
        self.setCentralWidget(w)
        grid = QtWidgets.QGridLayout(w)

        self.button1.setText("Open file")
        self.button1.setMinimumWidth(150)
        self.button1.clicked.connect(self.open_file)
        self.button2.setText("Exit")
        self.button2.clicked.connect(self.close)

        grid.addWidget(self.button1, 0, 0, QtCore.Qt.AlignLeft | QtCore.Qt.AlignBottom)
        grid.addWidget(self.button2, 0, 1, QtCore.Qt.AlignRight | QtCore.Qt.AlignBottom)

    def open_file(self):
        print("Open file")


def window():
    app = QApplication(sys.argv)
    okno = Okno()
    okno.show()
    sys.exit(app.exec_())

window()
...