Форум сайта python.su
Можно ли указывать позиции виджетов в пикселях? Я совсем не понимаю, как можно реализовать тот интерфейс, который мне нужен, средствами grid и layout. Я просто трачу все время на поиск решений для создания интерфейса, а не на программирование функциональности. Кто придумал позиционировать этими гридами? Я просто хочу указать позиции в пикселях.
Я сначала пытался использовать Qt Designer и нечто подобное ему. Я даже их средствами с использованием этих гридов не мог интерфейс создать. Все куда-то разъезжается, label прямо над текстовым полем не ставится.
Отредактировано Gooman (Май 9, 2014 20:26:06)
Офлайн
Вот такой вот интерфейс или что-то подобное у кого-то есть?
Отредактировано Gooman (Май 9, 2014 20:35:46)
Прикреплённый файлы: Безымянный.png (20,4 KБ)
Офлайн
Gooman
Можно ли указывать позиции виджетов в пикселях?
Gooman
Я просто трачу все время на поиск решений для создания интерфейса, а не на программирование функциональности.
Gooman
Кто придумал позиционировать этими гридами?
Gooman
Вот такой вот интерфейс или что-то подобное у кого-то есть?
from PyQt4 import QtGui, QtCore class Window(QtGui.QWidget): """Main widget.""" def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.grid = QtGui.QGridLayout(self) self.add = QtGui.QPushButton('Add') self.delete = QtGui.QPushButton('Delete') # ... объявление кучи ваших виджетов # ... self.grid.addWidget(self.add, 0, 0) # верх окна слева self.grid.addWidget(self.delete, 0, 1) # верх окна правее # ...
Офлайн
У меня есть интерфейс, в котором сделано все, кроме правой части того, что изображено на картинке. Если что-то добавлять правее, то оно добавляется не так, как изображено на картинке, а криво. Буду в пикселях все указывать. Все хорошо, если использовать указание, сколько ячеек будет занимать ListView по вертикали, но из-за этого увеличивается расстояние от label сверху этих ListView до самих ListView. Очень удобно, да.
Я это уже тут описывал: http://stackoverflow.com/questions/23567802/python-pyqt-widget-positioning-in-grid
Отредактировано Gooman (Май 9, 2014 21:47:54)
Офлайн
Офлайн
Gooman
Если что-то добавлять правее, то оно добавляется не так, как изображено на картинке, а криво.
addStretch
Отредактировано Alen (Май 9, 2014 22:16:40)
Офлайн
Gooman
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys from PyQt4 import QtGui, QtCore class MainWindow(QtGui.QMainWindow): def __init__(self): QtGui.QMainWindow.__init__(self) self.Centr = QtGui.QWidget() self.setCentralWidget(self.Centr) self.resize(800, 400) self.setWindowTitle('mainwindow') self.statusBar() # --------- BoxLayout --------- # основной контейнер base_h_layout = QtGui.QHBoxLayout() base_h_layout.addWidget(self.list_view_box(1), stretch=4) base_h_layout.addWidget(self.list_view_box(2), stretch=4) base_h_layout.addLayout(self.right_labels_box(), stretch=3) base_h_layout.setSpacing(2) base_h_layout.setMargin(10) self.Centr.setLayout(base_h_layout) def list_view_box(self, arg): """ принимает arg - название listview возвращает виджет-контейнер QGroupBox """ box = QtGui.QGroupBox("some text {0}".format(arg)) vbox = QtGui.QVBoxLayout(box) list_view = QtGui.QListWidget() button = QtGui.QPushButton("button {0}".format(arg)) vbox.addWidget(list_view) vbox.addWidget(button) return box def right_labels_box(self): """ возвращает контейнер - QVBoxLayout """ vbox_layout = QtGui.QVBoxLayout() # первая надпись label_1 = QtGui.QLabel("-------") label_1.setStyleSheet('background-color: {0};'.format('#ffffff')) label_1.setAlignment(QtCore.Qt.AlignHCenter) form_1 = QtGui.QFormLayout() form_1.addRow("label 1:", label_1) form_1.setRowWrapPolicy(QtGui.QFormLayout.WrapAllRows) # вторая надпись label_2 = QtGui.QLabel("-------") label_2.setStyleSheet('background-color: {0};'.format('#ffffff')) label_2.setAlignment(QtCore.Qt.AlignHCenter) form_2 = QtGui.QFormLayout() form_2.addRow("label 2:", label_2) form_2.setRowWrapPolicy(QtGui.QFormLayout.WrapAllRows) vbox_layout.addLayout(form_1) vbox_layout.addLayout(form_2) vbox_layout.addStretch(stretch=2) return vbox_layout app = QtGui.QApplication(sys.argv) main = MainWindow() main.show() sys.exit(app.exec_())
Alenа это правда
Не потратив хотя бы часа времени на обучение, нечего писать функциональность.
Офлайн
# -*- coding: utf8 -*- from PyQt4 import QtGui, QtCore class Window(QtGui.QWidget): """Main widget.""" def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.horizontal = QtGui.QHBoxLayout(self) self.one_layout = QtGui.QVBoxLayout() self.tile_one = QtGui.QLabel('one') self.listview_one = QtGui.QListView() self.button_one = QtGui.QPushButton('one') self.one_layout.addWidget(self.tile_one) self.one_layout.addWidget(self.listview_one) self.one_layout.addWidget(self.button_one) # # self.two_layout = QtGui.QVBoxLayout() self.title_two = QtGui.QLabel('two') self.listview_two = QtGui.QListView() self.button_two = QtGui.QPushButton('two') self.two_layout.addWidget(self.title_two) self.two_layout.addWidget(self.listview_two) self.two_layout.addWidget(self.button_two) # # self.three_layout = QtGui.QVBoxLayout() self.label_one = QtGui.QLabel('One Label') self.edit_one = QtGui.QLineEdit() self.label_two = QtGui.QLabel('Two Label') self.edit_two = QtGui.QLineEdit() self.three_layout.addWidget(self.label_one) self.three_layout.addWidget(self.edit_one) self.three_layout.addWidget(self.label_two) self.three_layout.addWidget(self.edit_two) self.three_layout.addStretch(1) # # self.horizontal.addLayout(self.one_layout) self.horizontal.addLayout(self.two_layout) self.horizontal.addLayout(self.three_layout) # # if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) myapp = Window() myapp.show() sys.exit(app.exec_())
Отредактировано Alen (Май 9, 2014 22:37:40)
Офлайн
Как добавить слой шириной на все окно под всеми объектами окна? Это мне для статуса нужно. Знаю, что colspan можно задавать в Grid, когда вызывается метод addWidget. Для QVBoxLayout метод addWidget другой.
Офлайн
Goomanв QMainWindow есть готовый статус бар
Как добавить слой шириной на все окно под всеми объектами окна
vrabeyhttp://wiki.python.su/%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D0%B8/%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5%D0%92%D0%A1%D1%80%D0%B5%D0%B4%D1%83PyQt4#A.2BBB8EMAQ9BDUEOwRM_.2BBEEEPgRBBEIEPgRPBD0EOARP-
self.statusBar()
Офлайн