Форум сайта python.su
Я написал следующую программу, которая рисует минное поле для игры сапер
# -*- coding: utf-8 -*- import mainw, sys from PyQt4 import QtCore, QtGui class WindowSapper(QtGui.QMainWindow): buttons=[] def __init__(self, parent=None): QtGui.QMainWindow.__init__(self,parent) self.ui=mainw.Ui_mainwin() self.ui.setupUi(self) for i in xrange(10): l=[] for j in xrange(10): b=QtGui.QPushButton() l.append(b) self.ui.gridLayout.addWidget(b, i, j, 1, 1) self.buttons.append(l) def main(): app=QtGui.QApplication(sys.argv) window=WindowSapper() window.show() sys.exit(app.exec_()) if __name__ == '__main__': main()
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'mainw.ui' # # Created: Tue Nov 27 08:52:39 2012 # by: PyQt4 UI code generator 4.9.4 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_mainwin(object): def setupUi(self, mainwin): mainwin.setObjectName(_fromUtf8("mainwin")) mainwin.resize(546, 530) self.centralwidget = QtGui.QWidget(mainwin) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) self.gridLayoutWidget = QtGui.QWidget(self.centralwidget) self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 30, 521, 461)) self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget")) self.gridLayout = QtGui.QGridLayout(self.gridLayoutWidget) self.gridLayout.setMargin(0) self.gridLayout.setHorizontalSpacing(6) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) mainwin.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(mainwin) self.menubar.setGeometry(QtCore.QRect(0, 0, 546, 21)) self.menubar.setObjectName(_fromUtf8("menubar")) mainwin.setMenuBar(self.menubar) self.statusbar = QtGui.QStatusBar(mainwin) self.statusbar.setObjectName(_fromUtf8("statusbar")) mainwin.setStatusBar(self.statusbar) self.retranslateUi(mainwin) QtCore.QMetaObject.connectSlotsByName(mainwin) def retranslateUi(self, mainwin): mainwin.setWindowTitle(QtGui.QApplication.translate("mainwin", "Сапер", None, QtGui.QApplication.UnicodeUTF8)) class mainwin(QtGui.QMainWindow, Ui_mainwin): def __init__(self, parent=None, f=QtCore.Qt.WindowFlags()): QtGui.QMainWindow.__init__(self, parent, f) self.setupUi(self)
<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>mainwin</class> <widget class="QMainWindow" name="mainwin"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>546</width> <height>530</height> </rect> </property> <property name="windowTitle"> <string>Сапер</string> </property> <widget class="QWidget" name="centralwidget"> <widget class="QWidget" name="gridLayoutWidget"> <property name="geometry"> <rect> <x>10</x> <y>30</y> <width>521</width> <height>461</height> </rect> </property> <layout class="QGridLayout" name="gridLayout"> <property name="horizontalSpacing"> <number>6</number> </property> </layout> </widget> </widget> <widget class="QMenuBar" name="menubar"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>546</width> <height>21</height> </rect> </property> </widget> <widget class="QStatusBar" name="statusbar"/> </widget> <resources/> <connections/> </ui>
Офлайн
За расстояния между виджетами в GridLayout отвечают два свойства:
http://qt-project.org/doc/qt-4.8/qgridlayout.html#horizontalSpacing-prop
http://qt-project.org/doc/qt-4.8/qgridlayout.html#verticalSpacing-prop
И можно поменять в дизайнере предварительно выбрав GridLayout.
Так же, чтобы это заработало, основному виджету нужно задать компоновку, например “По вертикали”.
Офлайн