Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 28, 2012 19:24:23

dreamer-s
Зарегистрирован: 2012-08-13
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt, вызов окна из окна

Доброго времени суток. Игрался и разбирался с PyQt. Сделал некоторую форму.

import sys
from PyQt4 import QtCore, QtGui
import datetime
try:
	_fromUtf8 = QtCore.QString.fromUtf8
except:
	_fromUtf8 = lambda s: s
class Ui_MainWindow(QtGui.QWidget):
	def __init__(self):
		super(Ui_MainWindow, self).__init__()
		self.nameWindowTitle = "MainWindowRequest"
	def setupUi(self, MainWindow):
		MainWindow.setObjectName(_fromUtf8("MainWindow"))
		MainWindow.resize(500, 440)
		self.centralwidget = QtGui.QWidget(MainWindow)
		self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
		self.datePlanned = QtGui.QDateEdit(self.centralwidget)
		self.datePlanned.setGeometry(QtCore.QRect(40, 80, 201, 22))
		self.datePlanned.setButtonSymbols(QtGui.QAbstractSpinBox.UpDownArrows)
		self.datePlanned.setCorrectionMode(QtGui.QAbstractSpinBox.CorrectToPreviousValue)
		self.datePlanned.setDate(datetime.date.today())
		self.datePlanned.setCalendarPopup(True)
		self.datePlanned.setObjectName(_fromUtf8("datePlanned"))
		self.dateCreation = QtGui.QDateEdit(self.centralwidget)
		self.dateCreation.setGeometry(QtCore.QRect(40, 40, 201, 22))
		self.dateCreation.setReadOnly(True)
		self.dateCreation.setButtonSymbols(QtGui.QAbstractSpinBox.NoButtons)
		self.dateCreation.setObjectName(_fromUtf8("dateCreation"))
		self.dateCreation.setDate(datetime.date.today())
		self.radioButtonPaper = QtGui.QRadioButton(self.centralwidget)
		self.radioButtonPaper.setGeometry(QtCore.QRect(150, 130, 82, 17))
		self.radioButtonPaper.setChecked(True)
		self.radioButtonPaper.setObjectName(_fromUtf8("radioButtonPaper"))
		self.radioButtonWeb = QtGui.QRadioButton(self.centralwidget)
		self.radioButtonWeb.setGeometry(QtCore.QRect(150, 150, 82, 17))
		self.radioButtonWeb.setObjectName(_fromUtf8("radioButtonWeb"))
		
		self.label = QtGui.QLabel(self.centralwidget)
		self.label.setGeometry(QtCore.QRect(40, 130, 81, 20))
		self.label.setObjectName(_fromUtf8("label"))
		
		self.labelCreation = QtGui.QLabel(self.centralwidget)
		self.labelCreation.setGeometry(QtCore.QRect(40, 23, 160, 20))
		self.labelCreation.setObjectName(_fromUtf8("labelCreation"))
		self.labelPlanned = QtGui.QLabel(self.centralwidget)
		self.labelPlanned.setGeometry(QtCore.QRect(40, 63, 160, 20))
		self.labelPlanned.setObjectName(_fromUtf8("labelPlanned"))
		self.labelUserName = QtGui.QLabel(self.centralwidget)
		self.labelUserName.setGeometry(QtCore.QRect(300, 23, 161, 20))
		self.labelUserName.setObjectName(_fromUtf8("labelUserName"))
		self.labelTextEdit = QtGui.QLabel(self.centralwidget)
		self.labelTextEdit.setGeometry(QtCore.QRect(40, 173, 160, 20))
		self.labelTextEdit.setObjectName(_fromUtf8("labelTextEdit"))
		self.lineEdit = QtGui.QLineEdit(self.centralwidget)
		self.lineEdit.setGeometry(QtCore.QRect(300, 40, 161, 20))
		self.lineEdit.setReadOnly(True)
		self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
		self.pushButton = QtGui.QPushButton(self.centralwidget)
		self.pushButton.setGeometry(QtCore.QRect(70, 360, 131, 23))
		self.pushButton.setObjectName(_fromUtf8("pushButton"))
		self.pushButton_2 = QtGui.QPushButton(self.centralwidget)
		self.pushButton_2.setGeometry(QtCore.QRect(300, 360, 131, 23))
		self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
		self.plainTextEdit = QtGui.QPlainTextEdit(self.centralwidget)
		self.plainTextEdit.setGeometry(QtCore.QRect(40, 190, 421, 151))
		self.plainTextEdit.setPlainText(_fromUtf8(""))
		self.plainTextEdit.setObjectName(_fromUtf8("plainTextEdit"))
		MainWindow.setCentralWidget(self.centralwidget)
		self.menubar = QtGui.QMenuBar(MainWindow)
		self.menubar.setGeometry(QtCore.QRect(0, 0, 500, 20))
		self.menubar.setObjectName(_fromUtf8("menubar"))
		self.menu = QtGui.QMenu(self.menubar)
		self.menu.setObjectName(_fromUtf8("menu"))
		MainWindow.setMenuBar(self.menubar)
		self.statusbar = QtGui.QStatusBar(MainWindow)
		self.statusbar.setObjectName(_fromUtf8("statusbar"))
		MainWindow.setStatusBar(self.statusbar)
		self.actionExit = QtGui.QAction(MainWindow)
		self.actionExit.setCheckable(True)
		self.actionExit.setObjectName(_fromUtf8("actionExit"))
		self.menu.addAction(self.actionExit)
		self.menubar.addAction(self.menu.menuAction())
		self.retranslateUi(MainWindow)
		QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), lambda :self.onPushButtonClickSendRequest(MainWindow))
		#QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL(_fromUtf8("clicked()")), self.showTable)
		QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL(_fromUtf8("triggered()")), MainWindow.close)
		QtCore.QMetaObject.connectSlotsByName(MainWindow)
	def showTable(self):
		pass
	def showDialogError(self, text):
		QtGui.QMessageBox.critical(self, self.toUtf("Ошибка"), self.toUtf(text), QtGui.QMessageBox.Ok)
	def showDialogSuccess(self, text):
		QtGui.QMessageBox.information(self, self.toUtf("Отлично"), self.toUtf(text), QtGui.QMessageBox.Ok)
	def onPushButtonClickSendRequest(self, MWnd):
		#нечто сотворяется 
		MWnd.close()
	def toUtf(self, text):
		return QtGui.QApplication.translate("MainWindow", text, None, QtGui.QApplication.UnicodeUTF8)
	def retranslateUi(self, MainWindow):
		MainWindow.setWindowTitle(self.toUtf(self.nameWindowTitle))
		self.lineEdit.setText(self.toUtf("Noname"))
		self.labelUserName.setText(self.toUtf("Ваше имя в системе"))
		self.labelTextEdit.setText(self.toUtf("Описание"))
		self.labelCreation.setText(self.toUtf("Дата сегодня"))
		self.labelPlanned.setText(self.toUtf("Запланированая дата"))
		self.radioButtonPaper.setText(self.toUtf("abc"))
		self.radioButtonWeb.setText(self.toUtf("def"))
		self.label.setText(self.toUtf("Тип"))
		self.pushButton.setText(self.toUtf("Сформировать запрос"))
		self.pushButton_2.setText(self.toUtf("Просмотр запросов"))
		self.menu.setTitle(self.toUtf("Меню"))
		self.actionExit.setText(self.toUtf("Выход"))
def main():
	app = QtGui.QApplication(sys.argv)
	MainWind = QtGui.QMainWindow()
	form = Ui_MainWindow()
	form.setupUi(MainWind)
	desktop = QtGui.QApplication.desktop().availableGeometry()
	x, y = (desktop.width() - MainWind.width())//2, (desktop.height() - MainWind.height())//2	
	MainWind.move(x, y)
	MainWind.show()
	sys.exit(app.exec_())
if __name__=="__main__":
	main()

и решил сделать таблицу, в новом окне. Таблицу я реализовал в отдельном файле.

import sys
from PyQt4 import QtCore, QtGui
try:
	_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
	_fromUtf8 = lambda s: s
class TableLedData(QtGui.QTableWidget):
	def __init__(self, structdata, *args):
		QtGui.QTableWidget.__init__(self, *args)
		self.data = structdata
		self.col, self.row = args
		self.setTable()
		self.setData()
		self.current = 0, 0
	def setData(self):
		for n in range(self.col):
			color=self.setComboBoxTable(n, int(self.data[n][0]))
			for m in range(1, self.row):
				newitem = QtGui.QTableWidgetItem(self.data[n][m])
				self.setItem(n, m, newitem)
				self.item(n, m).setBackgroundColor(color)
	def getColor(self, comboBoxTable):
		iCur = comboBoxTable.currentIndex()
		if	iCur==0:	return(QtGui.QColor(255, 0, 150))
		elif iCur==1:	return(QtGui.QColor(0, 255, 0))
		elif iCur==2:	return(QtGui.QColor(0, 0, 255))
	def setPalette_ComboBox(self, comboBoxTable):
		color = self.getColor(comboBoxTable)
		palette = QtGui.QPalette()
		brush = QtGui.QBrush(color)
		brush.setStyle(QtCore.Qt.SolidPattern)
		palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
		brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
		brush.setStyle(QtCore.Qt.SolidPattern)
		palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Highlight, brush)
		comboBoxTable.setPalette(palette)
		return(color)
	def setComboBoxTable(self, col, iCur):
		comboBoxTable=QtGui.QComboBox()
		comboBoxTable.setObjectName("comboBoxTable_"+str(col))
		QtCore.QObject.connect(comboBoxTable, QtCore.SIGNAL(_fromUtf8("currentIndexChanged(int)")), lambda :self.setColorCol(comboBoxTable))
		self.setCellWidget(col, 0, comboBoxTable)
		comboBoxTable.addItem(_fromUtf8("One"))
		comboBoxTable.addItem(_fromUtf8("Two"))
		comboBoxTable.addItem(_fromUtf8("Tree"))
		comboBoxTable.setCurrentIndex(iCur)
		color=self.setPalette_ComboBox(comboBoxTable)
		return(color)
	def setColorCol(self, comboBoxTable):
		n = int(comboBoxTable.objectName()[14:])
		color = self.setPalette_ComboBox(comboBoxTable)
		for m in range(1, self.row):
			newitem = QtGui.QTableWidgetItem(self.data[n][m])
			self.setItem(n, m, newitem)
			self.item(n, m).setBackgroundColor(color)
	def setTable(self):
		self.verticalHeader().setDefaultSectionSize(20)
		#self.setSortingEnabled(True)
		self.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
		self.setAlternatingRowColors(True)
		self.setObjectName(_fromUtf8("tableWidget"))
		self.setWordWrap(False)
		self.setGridStyle(QtCore.Qt.SolidLine)
		self.setShowGrid(True)
		self.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
		QtCore.QObject.connect(self, QtCore.SIGNAL(_fromUtf8("clicked(QModelIndex)")), self.current)
	def current(self):
		cur_col = self.currentColumn()
		cur_row = self.currentRow()
		self.current = cur_col, cur_row
		print(cur_col, cur_row)
class Ui_Form(QtGui.QWidget):
	def __init__(self, dataForTable, col, row):
		super(Ui_Form, self).__init__()
		self.data, self.col, self.row = dataForTable, col, row
	def setupUi(self, Form):
		Form.setObjectName(_fromUtf8("Form"))
		Form.resize(550, 350)
		Form.setWindowModality(QtCore.Qt.WindowModal)
		self.gridLayoutWidget = QtGui.QWidget(Form)
		self.gridLayoutWidget.setGeometry(QtCore.QRect(0, 0, Form.width(), Form.height()))
		self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget"))
		self.gridLayout = QtGui.QGridLayout(self.gridLayoutWidget)
		self.gridLayout.setContentsMargins(10, 15, 10, 15)
		self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
		self.horizontalLayout = QtGui.QHBoxLayout()
		self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
		self.pushButton_del = QtGui.QPushButton(self.gridLayoutWidget)
		self.pushButton_del.setObjectName(_fromUtf8("pushButton_del"))
		self.horizontalLayout.addWidget(self.pushButton_del)
		self.pushButton_block = QtGui.QPushButton(self.gridLayoutWidget)
		self.pushButton_block.setObjectName(_fromUtf8("pushButton_block"))
		self.horizontalLayout.addWidget(self.pushButton_block)
		self.pushButton_cansel = QtGui.QPushButton(self.gridLayoutWidget)
		self.pushButton_cansel.setObjectName(_fromUtf8("pushButton_cansel"))
		self.horizontalLayout.addWidget(self.pushButton_cansel)
		self.gridLayout.addLayout(self.horizontalLayout, 2, 1, 1, 1)
		self.tableWidget = TableLedData(self.data, self.col, self.row)
		self.gridLayout.addWidget(self.tableWidget, 1, 1, 1, 1)
		self.retranslateUi(Form)
		QtCore.QObject.connect(self.pushButton_cansel, QtCore.SIGNAL(_fromUtf8("clicked()")), Form.close)
		QtCore.QMetaObject.connectSlotsByName(Form)
	def toUtf(self, text):
		return QtGui.QApplication.translate("Form", text, None, QtGui.QApplication.UnicodeUTF8)
	def retranslateUi(self, Form):
		Form.setWindowTitle(self.toUtf("123S"))
		self.pushButton_del.setText(self.toUtf("Удалить"))
		self.pushButton_block.setText(self.toUtf("Блокировать"))
		self.pushButton_cansel.setText(self.toUtf("Закрыть"))
def main():
	lista = ['0', 'aa', 'ab', 'ac', 'ad']
	listb = ['1', 'ba', 'bb', 'bc', 'bd']
	listc = ['2', 'ca', 'cb', 'cc', 'cd']
	listd = ['0', 'da', 'db', 'dc', 'dd']
	liste = ['1', 'ea', 'eb', 'ec', 'ed']
	listf = ['1', 'fa', 'fb', 'fc', 'fd']
	dataFromDB = lista, listb, listc, listd, liste, listf
	col, row = len(dataFromDB), len(dataFromDB[0])
	app = QtGui.QApplication(sys.argv)
	MainWind = QtGui.QMainWindow()
	form = Ui_Form(dataFromDB, col, row)
	form.setupUi(MainWind)
	MainWind.show()
	sys.exit(app.exec_())
if __name__=="__main__":
	main()

Помогите, а то застопорился. Я конвертирую с ui в py, потом сижу, разбираю, смотрю что и как можно сделать… Несколько вопросов
1) как подключить файл с таблицей, что бы вызвать таблицу в модальном окне.
2) Если для таблицы установить setSortingEnabled(True), укажите, как и что исправить, ибо после сортировки не идет соответствие ComboBox - строка.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version