Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 30.12.2021
Сообщений: 68
PyQt5

Как расположить кнопку в правом нижнем углу всего окна?

12.04.2022, 19:39. Показов 2768. Ответов 11

Студворк — интернет-сервис помощи студентам
есть 2 кнопки одну надо расположить с лево другую с права, надо это сделать компановкой(не по пиксельный указатель местоположения) да бы они вместе с окном смещались подскажет кто как это сжделать?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.04.2022, 19:39
Ответы с готовыми решениями:

Как расположить форму в правом нижнем углу?
Как расположить форму в правом нижнем углу, выше панели задач? Пробовал так procedure show_form_in_position(); var ...

Расположить блок в правом нижнем углу экрана
так, чтобы если страницу не прокрутишь больше вниз, этот блок бы исчезал, и появлялся бы вновь, когда можно прокрутить вниз подскажите,...

Массив. Есть ли четные числа в верхнем левом и нижнем левом углу? Поменять местами элементы в верхнем правом и нижнем правом углу
Создать массив размерностью M×N, элементы которого читаются из внешнего файла (*.txt, *.xls и т.п.). Вывести его на экран. Проверить: -...

11
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
12.04.2022, 21:06
Как-то так
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout
from PyQt5.QtWidgets import QPushButton
 
class Window(QWidget):
  def __init__(self):
    super(Window, self).__init__()
    button_left = QPushButton("Левая", self)
    button_right = QPushButton("Правая", self)
 
    hbox = QHBoxLayout()
    hbox.addWidget(button_left)
    hbox.addStretch(1)
    hbox.addWidget(button_right)
 
    vbox = QVBoxLayout()
    vbox.addStretch(1)
    vbox.addLayout(hbox)
 
    self.setLayout(vbox)
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
 
    win = Window()
    win.show()
    sys.exit(app.exec_())
0
0 / 0 / 0
Регистрация: 30.12.2021
Сообщений: 68
13.04.2022, 02:31  [ТС]
вашим способом оно раскладывается так, мне же нужно что бы они были на одном уровне
0
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
13.04.2022, 08:50
Картинка интересная... А код, как я понимаю, секретный, показывать нельзя...
Предполагаю, что кнопки 1 и 2 находятся в разных QVBoxLayout.
Я предлагал другое..

Добавлено через 1 час 31 минуту
Вероятно, Вам подойдёт этот вариант:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout
from PyQt5.QtWidgets import QLabel, QLineEdit
from PyQt5.QtWidgets import QPushButton, QCheckBox, QLineEdit
 
class Window(QWidget):
  def __init__(self):
    super(Window, self).__init__()
    button_ok = QPushButton("OK", self)
    button_output = QPushButton("Вывод", self)
    button_tuning = QPushButton("Настройки", self)
 
    label_quantity = QLabel("По сколько:", self)
    line_quantity = QLineEdit("", self)
 
    check_quant00 = QCheckBox("неведома хрень", self)
    check_quant01 = QCheckBox("какая-то дрянь", self)
    check_quant02 = QCheckBox("зелёная муть", self)
 
    check_quant10 = QCheckBox("смешать", self)
    check_quant11 = QCheckBox("не взбалтывать", self)
 
    hbox_top = QHBoxLayout()
    hbox_top.addWidget(label_quantity)
    hbox_top.addWidget(line_quantity)
 
    vbox_left = QVBoxLayout()
    vbox_left.addWidget(check_quant00)
    vbox_left.addWidget(check_quant01)
    vbox_left.addWidget(check_quant02)
 
    vbox_right = QVBoxLayout()
    vbox_right.addWidget(check_quant10)
    vbox_right.addWidget(check_quant11)
    vbox_right.addStretch(1)
 
    hbox_middle = QHBoxLayout()
    hbox_middle.addLayout(vbox_left)
    hbox_middle.addLayout(vbox_right)
    hbox_middle.addStretch(1)
 
    hbox_button = QHBoxLayout()
    hbox_button.addWidget(button_tuning)
    hbox_button.addStretch(1)
 
    vbox_content = QVBoxLayout()
    vbox_content.addLayout(hbox_top)
    vbox_content.addLayout(hbox_middle)
    vbox_content.addStretch(1)
    vbox_content.addLayout(hbox_button)
 
    vbox_button = QVBoxLayout()
    vbox_button.addWidget(button_ok)
    vbox_button.addStretch(1)
    vbox_button.addWidget(button_output)
 
    hbox = QHBoxLayout()
    hbox.addLayout(vbox_content)
    hbox.addLayout(vbox_button)
 
    self.setLayout(hbox)
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
 
    win = Window()
    win.show()
    sys.exit(app.exec_())
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
13.04.2022, 11:30
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from PyQt5 import Qt
 
class W(Qt.QWidget):
    def __init__(self):
        super().__init__()
        grid = Qt.QGridLayout(self)
        grid.setContentsMargins(1,1,1,1)
        grid.addWidget(Qt.QLabel('Label'),0,0,1,1)
        grid.addWidget(Qt.QLineEdit(),0,1,1,7)
        grid.addWidget(Qt.QPushButton(),0,8,1,1)
        for i in range(1,8):
            grid.addWidget(Qt.QCheckBox(),i,0,1,1)
        for i in range(1,6):
            grid.addWidget(Qt.QCheckBox(),i,1,1,1)
        grid.addWidget(Qt.QPushButton(),9,0,1,1)
        grid.addWidget(Qt.QPushButton(),9,8,1,1)
0
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
13.04.2022, 13:23
vic5710, в принципе, если сделать нечто среднее между нашими вариантами, тогда получается более-менее компактно и решётка не расползается при изменении размеров окна:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5 import QtWidgets
 
class W(QtWidgets.QWidget):
    def __init__(self):
        super(W, self).__init__()
 
        button_ok = QtWidgets.QPushButton("OK", self)
        button_output = QtWidgets.QPushButton("Вывод", self)
        button_tuning = QtWidgets.QPushButton("Настройки", self)
 
        label_quantity = QtWidgets.QLabel("По сколько:", self)
        line_quantity = QtWidgets.QLineEdit("", self)
 
        grid = QtWidgets.QGridLayout()
        grid.setContentsMargins(1,1,1,1)
        for i in range(1,8):
            grid.addWidget(QtWidgets.QCheckBox('Болт № '+str(i), self),i,0,1,1)
        for i in range(1,6):
            grid.addWidget(QtWidgets.QCheckBox('Гайка № '+str(i), self),i,1,1,1)
 
        hbox_top = QtWidgets.QHBoxLayout()
        hbox_top.addWidget(label_quantity)
        hbox_top.addWidget(line_quantity)
 
        hbox_middle = QtWidgets.QHBoxLayout()
        hbox_middle.addLayout(grid)
        hbox_middle.addStretch(1)
 
        hbox_bottom = QtWidgets.QHBoxLayout()
        hbox_bottom.addWidget(button_tuning)
        hbox_bottom.addStretch(1)
 
        vbox_left = QtWidgets.QVBoxLayout()
        vbox_left.addLayout(hbox_top)
        vbox_left.addLayout(hbox_middle)
        vbox_left.addStretch(1)
        vbox_left.addLayout(hbox_bottom)
 
        vbox_right = QtWidgets.QVBoxLayout()
        vbox_right.addWidget(button_ok)
        vbox_right.addStretch(1)
        vbox_right.addWidget(button_output)
 
        hbox = QtWidgets.QHBoxLayout()
        hbox.addLayout(vbox_left)
        hbox.addLayout(vbox_right)
 
        self.setLayout(hbox)
 
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
 
    win = W()
    win.show()
    sys.exit(app.exec_())
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
13.04.2022, 18:07
iamvic, можно, закон не запрещает
для таких окон ввода я бы QFormLayout применил, но ТС видней

Добавлено через 9 минут
Python
1
2
3
4
5
6
7
class W(Qt.QWidget):
    def __init__(self):
        super().__init__()
        form = Qt.QFormLayout(self)
        for i in range(7):
            form.addRow('Label '+str(i), Qt.QSpinBox())
        form.addRow(Qt.QPushButton('OK'),Qt.QPushButton('Cancel'))
как то так
0
0 / 0 / 0
Регистрация: 30.12.2021
Сообщений: 68
25.04.2022, 13:12  [ТС]
не подумал про код(думаю сами функции вам не нужн так что добавил только часть с компановкой),помоему ни один из вариантов не сработает
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
class category(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        global t
        t =[]
        self.dd = 0
        self.setWindowTitle('Категории')
        self.setMinimumSize(800, 400)
        qbtn = QPushButton('Вывод', self)
        qbtn.resize(qbtn.sizeHint())
 
        qbtn.clicked.connect(self.clos)
        okbtn = QPushButton('ок', self)
        okbtn.resize(okbtn.sizeHint())
        okbtn.clicked.connect(self.okbtn)
        catg = QPushButton('Настройки', self)
        catg.resize(catg.sizeHint())
 
        catg.clicked.connect(self.seting)
        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(catg)
        hbox.addStretch(1)
        hbox.addWidget(qbtn)
 
        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addStretch(1)
        vbox.addLayout(hbox)
        coteg = open('category.txt',encoding='ANSI')
        self.cot = coteg.read()
        self.j = self.cot.splitlines()
        self.z = []
        self.formLayout = QtWidgets.QFormLayout()
        self.n = QtWidgets.QLineEdit()
        self.formLayout.addRow("По сколько:", self.n)
        self.vvlayout = QtWidgets.QVBoxLayout()
        self.hlayout = QtWidgets.QHBoxLayout()
        self.hhlayout = QtWidgets.QHBoxLayout()
        self.hlayout.addLayout(self.formLayout)
        self.hlayout.addWidget(okbtn)
        self.vvlayout.addLayout(self.hlayout)
        j = math.ceil(len(self.j) / 12)
        jj = len(self.j) % 12
        k = 0
        flag = False
        for ii in range(j):
            vlayout = QtWidgets.QVBoxLayout()
            for i in range(12):
 
                self.e = QtWidgets.QCheckBox(self.j[k])
                self.z.append(self.e)
                vlayout.addWidget(self.e)
 
                k += 1
                if k == len(self.j):
                    vlayout.addStretch()
                    break
 
            self.hhlayout.addLayout(vlayout)
            if k == len(self.j):
                vlayout = QtWidgets.QVBoxLayout()
                vlayout.addStretch()
                vlayout.addWidget(qbtn)
                self.hhlayout.addStretch()
                self.hhlayout.addLayout(vlayout)
                break
        self.vvlayout.addLayout(self.hhlayout)
 
        self.vvlayout.addLayout(vbox)
        self.setLayout(self.vvlayout)
        for i in range(len(self.z)):
            self.z[i].stateChanged.connect(
                lambda state=self.z[i].isChecked(), d = self.j[i] :self.selectBooks(state, d))
0
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
25.04.2022, 13:45
Цитата Сообщение от daicha Посмотреть сообщение
не подумал про код
это не поможет

Перечитайте Ваше первоначальное описание проблемы:
Цитата Сообщение от daicha Посмотреть сообщение
есть 2 кнопки одну надо расположить с лево другую с права, надо это сделать компановкой(не по пиксельный указатель местоположения) да бы они вместе с окном смещались
Ни одно из предложенных решений Вас не удовлетворило. Как Вы их там у себя применяли тоже не ясно.
Ну, нарисуйте ручками то, что Вы хотите видеть, и покажите эту картинку, снабдив её комментариями о том, как должны перемещаться графические элементы при изменении размеров картинки.
1
0 / 0 / 0
Регистрация: 30.12.2021
Сообщений: 68
25.04.2022, 14:57  [ТС]
вот
0
0 / 0 / 0
Регистрация: 30.12.2021
Сообщений: 68
25.04.2022, 14:58  [ТС]
вот так вот
0
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
25.04.2022, 17:21
Лучший ответ Сообщение было отмечено daicha как решение

Решение

Как Вы этого добились? Вроде бы как в первом же моём ответе всё понятно сделано - кнопки ЛЕВАЯ и ПРАВАЯ на одном уровне находятся.

Может быть это Вам поможет?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout
from PyQt5.QtWidgets import QLabel, QLineEdit
from PyQt5.QtWidgets import QPushButton, QCheckBox, QLineEdit
 
class Window(QWidget):
  def __init__(self):
    super(Window, self).__init__()
    button_ok = QPushButton("OK", self)
    button_output = QPushButton("Вывод", self)
    button_tuning = QPushButton("Настройки", self)
 
    label_quantity = QLabel("По сколько:", self)
    line_quantity = QLineEdit("", self)
 
    hbox_top = QHBoxLayout()
    hbox_top.addWidget(label_quantity)
    hbox_top.addWidget(line_quantity)
    hbox_top.addWidget(button_ok)
 
    hbox_bottom = QHBoxLayout()
    hbox_bottom.addWidget(button_tuning)
    hbox_bottom.addStretch(1)
    hbox_bottom.addWidget(button_output)
 
    vbox = QVBoxLayout()
    vbox.addLayout(hbox_top)
    # <== сюда надо добавить
    # vbox.addLayout(QHBoxLayout с чекбоксами и названиями)
    # чекбоксы и названия могут быть помещены в этот QHBoxLayout
    # разными способами, например, с помощью:
    # 1. QVBoxLayout
    # 2. QGridLayout
    # 3. QFormLayout и так далее (см.документацию)
    vbox.addStretch(1)
    vbox.addLayout(hbox_bottom)
 
    self.setLayout(vbox)
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
 
    win = Window()
    win.show()
    sys.exit(app.exec_())
Добавлено через 1 час 40 минут
daicha, вот, что Вам стоило оформить выложенный Вами код в виде готового приложения, чтобы помогальщики не мучались, спотыкаясь об ошибки?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys, math
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout
from PyQt5.QtWidgets import QLabel, QLineEdit
from PyQt5.QtWidgets import QPushButton, QCheckBox, QLineEdit
 
class category(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        global t
        t =[]
        self.dd = 0
        self.setWindowTitle('Категории')
        self.setMinimumSize(800, 400)
        qbtn = QPushButton('Вывод', self)
        qbtn.resize(qbtn.sizeHint())
 
#        qbtn.clicked.connect(self.clos)
        okbtn = QPushButton('ок', self)
        okbtn.resize(okbtn.sizeHint())
#        okbtn.clicked.connect(self.okbtn)
        catg = QPushButton('Настройки', self)
        catg.resize(catg.sizeHint())
 
#        catg.clicked.connect(self.seting)
        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(catg)
        hbox.addStretch(1)
        hbox.addWidget(qbtn)
 
        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addStretch(1)
        vbox.addLayout(hbox)
        coteg = open('category.txt') #,encoding='ANSI')
        self.cot = coteg.read()
        self.j = self.cot.splitlines()
        self.z = []
        self.formLayout = QtWidgets.QFormLayout()
        self.n = QtWidgets.QLineEdit()
        self.formLayout.addRow("По сколько:", self.n)
        self.vvlayout = QtWidgets.QVBoxLayout()
        self.hlayout = QtWidgets.QHBoxLayout()
        self.hhlayout = QtWidgets.QHBoxLayout()
        self.hlayout.addLayout(self.formLayout)
        self.hlayout.addWidget(okbtn)
        self.vvlayout.addLayout(self.hlayout)
        j = math.ceil(len(self.j) / 12)
        jj = len(self.j) % 12
        k = 0
        flag = False
        for ii in range(j):
            vlayout = QtWidgets.QVBoxLayout()
            for i in range(12):
 
                self.e = QtWidgets.QCheckBox(self.j[k])
                self.z.append(self.e)
                vlayout.addWidget(self.e)
 
                k += 1
                if k == len(self.j):
                    vlayout.addStretch()
                    break
 
            self.hhlayout.addLayout(vlayout)
            if k == len(self.j):
                vlayout = QtWidgets.QVBoxLayout()
#                vlayout.addStretch()          # <=== ??? на хрена это здесь?
#                vlayout.addWidget(qbtn)       # <=== ??? на хрена это здесь?
                self.hhlayout.addStretch()
                self.hhlayout.addLayout(vlayout)
                break
        self.vvlayout.addLayout(self.hhlayout)
 
        self.vvlayout.addLayout(vbox)
        self.setLayout(self.vvlayout)
        for i in range(len(self.z)):
            self.z[i].stateChanged.connect(
                lambda state=self.z[i].isChecked(), d = self.j[i] :self.selectBooks(state, d))
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
 
    win = category()
    win.show()
    sys.exit(app.exec_())
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.04.2022, 17:21
Помогаю со студенческими работами здесь

Появление окна в правом нижнем углу
Собственно сабж)

Программа, нажимающая кнопку в нижнем правом углу
Каким оператором сделать программу нажимающую кнопку в нижнем правом углу? Можно ли такое сделать вообще? pascalABC

Расположить элемент, обладающий наименьшим по модулю значением, в правом нижнем углу матрицы
С помошью допустимых преобразований добиться того,чтобы один из элементов матрицы,обладающим наименьшим по модулю значением,расположить в...

Закрепление окна в правом нижнем углу второго монитора
Всем привет! Можете подсказать, как сделать закрепелнием главного окошка в правом нижнем углу второго монитора? Хочу сделать выбор...

Поменять местами элементы в верхнем правом и нижнем правом углу массива
Создать массив размерностью MxN, элементы которого читаются из внешнего файла (*txt, *.xls и т.п) Вывести его на экран. Проверить: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru