Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Расстояния между QPushButton в QGridLayuot [RSS Feed]

#1 Ноя. 27, 2012 08:31:22

vladdv89
Зарегистрирован: 2012-11-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Расстояния между QPushButton в QGridLayuot

Я написал следующую программу, которая рисует минное поле для игры сапер

	# -*- 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)
Вот ui файл, если нужен
	<?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, между ними есть свободные промежутки, то есть они не полностью заполнили ячейки GridLayout. Как избавиться от этих промежутков?

Офлайн

#2 Ноя. 27, 2012 17:12:44

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Расстояния между QPushButton в QGridLayuot

За расстояния между виджетами в 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.

Так же, чтобы это заработало, основному виджету нужно задать компоновку, например “По вертикали”.

Офлайн

  • Начало
  • » GUI
  • » Расстояния между QPushButton в QGridLayuot [RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version