Запись пациентов в таблицу
Читающего приветствую! Делаю примитивное приложение для измерения некоторого параметра и записи пациентов с реузльтатом в таблицу. Возникли трудности.
- Как по нажатию кнопки "записать", выполнилось создание таблички со столбцами с названиями как в форме "id"? Нужно, чтобы таблица в отдельном окне появилась. Читал про QTableWidgets, но пока дикая каша в голове.
- Также по нажатию кнопки результат подсчета должен высветиться в области между "конц" и "ммоль" (для этого я сделал виджет, но оставил пустым, в коде он упоминается как resfin, может это можно реализовать как-то)
- Ну и, пожалуй, высший для меня пока пилотаж, мне нужно чтобы результат заносился в ту же таблицу в 4-ый столбец, но чтобы 4 столбец заполнялся независимо от первых трех (которые про id) таблица по задумке должна заполняться как скрине.
calculation - модулёк из 4 строчек, который считает ту самую концентрацию. Оставляю код, надеюсь на помощь, совет, открыт для сотрудничества
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox
from Calculation import calc
class Ui_MainWindow(object):
#создание графики кнопок
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.CalcButton = QtWidgets.QPushButton(self.centralwidget)
self.CalcButton.setGeometry(QtCore.QRect(310, 320, 211, 71))
font = QtGui.QFont()
font.setFamily("Bahnschrift Light")
font.setPointSize(12)
self.CalcButton.setFont(font)
self.CalcButton.setObjectName("CalcButton")
self.idpat = QtWidgets.QGroupBox(self.centralwidget)
self.idpat.setGeometry(QtCore.QRect(120, 40, 571, 191))
font = QtGui.QFont()
font.setFamily("Bahnschrift Light")
font.setPointSize(10)
self.idpat.setFont(font)
self.idpat.setAlignment(QtCore.Qt.AlignCenter)
self.idpat.setObjectName("idpat")
self.nam = QtWidgets.QLabel(self.idpat)
self.nam.setGeometry(QtCore.QRect(60, 45, 80, 30))
font = QtGui.QFont()
font.setFamily("Bahnschrift Light")
font.setPointSize(10)
self.nam.setFont(font)
self.nam.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.nam.setObjectName("nam")
self.nameed = QtWidgets.QTextEdit(self.idpat)
self.nameed.setGeometry(QtCore.QRect(150, 40, 400, 40))
self.nameed.setObjectName("nameed")
self.birdat = QtWidgets.QLabel(self.idpat)
self.birdat.setGeometry(QtCore.QRect(9, 95, 131, 30))
self.birdat.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.birdat.setObjectName("birdat")
self.gend = QtWidgets.QLabel(self.idpat)
self.gend.setGeometry(QtCore.QRect(60, 145, 80, 30))
self.gend.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.gend.setObjectName("gend")
self.combox1 = QtWidgets.QComboBox(self.idpat)
self.combox1.setGeometry(QtCore.QRect(150, 140, 51, 40))
self.combox1.setObjectName("combox1")
self.combox1.addItem("")
self.combox1.addItem("")
self.birdated = QtWidgets.QDateEdit(self.idpat)
self.birdated.setGeometry(QtCore.QRect(150, 90, 121, 40))
self.birdated.setObjectName("birdated")
self.glucon = QtWidgets.QLabel(self.centralwidget)
self.glucon.setGeometry(QtCore.QRect(60, 430, 231, 51))
font = QtGui.QFont()
font.setFamily("Bahnschrift Light")
font.setPointSize(12)
self.glucon.setFont(font)
self.glucon.setObjectName("glucon")
self.regButton = QtWidgets.QPushButton(self.centralwidget)
self.regButton.setGeometry(QtCore.QRect(550, 240, 141, 28))
font = QtGui.QFont()
font.setFamily("Bahnschrift Light")
font.setPointSize(12)
self.regButton.setFont(font)
self.regButton.setObjectName("regButton")
self.mmol = QtWidgets.QLabel(self.centralwidget)
self.mmol.setGeometry(QtCore.QRect(460, 430, 91, 51))
font = QtGui.QFont()
font.setFamily("Bahnschrift Light")
font.setPointSize(12)
self.mmol.setFont(font)
self.mmol.setObjectName("mmol")
self.resfin = QtWidgets.QLabel(self.centralwidget)
self.resfin.setGeometry(QtCore.QRect(310, 440, 131, 41))
font = QtGui.QFont()
font.setFamily("Bahnschrift Light")
font.setPointSize(12)
self.resfin.setFont(font)
self.resfin.setText("")
self.resfin.setObjectName("resfin")
#создание менюбара
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName("menubar")
self.menu = QtWidgets.QMenu(self.menubar)
self.menu.setObjectName("menu")
MainWindow.setMenuBar(self.menubar)
self.action_4 = QtWidgets.QAction(MainWindow)
self.action_4.setObjectName("action_4")
self.exit1 = QtWidgets.QAction(MainWindow)
self.exit1.setObjectName("exit1")
self.menu.addAction(self.action_4)
self.menu.addAction(self.exit1)
self.menubar.addAction(self.menu.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
#кнопки
#кнопка измерения
self.CalcButton.setText(_translate("MainWindow", "Начать измерение"))
self.idpat.setTitle(_translate("MainWindow", "ID Пациента"))
self.nam.setText(_translate("MainWindow", "ФИО"))
self.nameed.setStatusTip(_translate("MainWindow", "Введите ФИО пациента"))
self.birdat.setText(_translate("MainWindow", "Дата рождения"))
self.gend.setText(_translate("MainWindow", "Пол"))
self.combox1.setStatusTip(_translate("MainWindow", "Выберите пол"))
self.combox1.setItemText(0, _translate("MainWindow", "М"))
self.combox1.setItemText(1, _translate("MainWindow", "Ж"))
self.birdated.setStatusTip(_translate("MainWindow", "Введите дату рождения пациента"))
self.glucon.setText(_translate("MainWindow", "Концентрация Глюкозы:"))
self.mmol.setText(_translate("MainWindow", "ммоль/л"))
self.menu.setTitle(_translate("MainWindow", "Меню"))
self.regButton.setStatusTip(_translate("MainWindow", "Сохранить инфо о пациенте"))
self.regButton.setText(_translate("MainWindow", "Записать"))
#функция записи
#действия менюбара
#справка
self.action_4.setText(_translate("MainWindow", "Справка"))
self.action_4.setStatusTip(_translate("MainWindow", "Узнать об авторах")) #сообщение в левом нижнем углу
self.action_4.setShortcut(_translate("MainWindow", "Ctrl+I")) #shortcut дает возможность назначить комбинацию кнопок
self.action_4.triggered.connect(self.infowindow)
#выход из программы
self.exit1.setText(_translate("MainWindow", "Выход"))
self.exit1.setStatusTip(_translate("MainWindow", "Выйти из программы"))
self.exit1.setShortcut(_translate("MainWindow", "Ctrl+Shift+Q"))
self.exit1.triggered.connect(self.exitapp)
#функция выхода из программы
def exitapp(self):
QtWidgets.QApplication.quit()
#функция об авторах
def infowindow(self):
msg = QMessageBox()
msg.setWindowTitle("Справка")
msg.setText("")
x = msg.exec_()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Ответы (1 шт):
Я сделал много комментариев в тексте. Попробуйте изучить и понять написанное. Что будет не понятно -спросите, но после изучения программы.
Некоторые советы:
НИКОГДА Не изменяйте код, сгенерированный Qt Designer, НИКОГДА!. Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.
Для ввода строки используйте QLineEdit, а не QTextEdit
Вы должны понимать, что какие-либо расчеты применительны к конкретному пациенту.
Удачи вам.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox, QTableWidget, QTableWidgetItem
from PyQt5.QtCore import Qt
#from Calculation import calc # ?
class Ui_MainWindow(object):
#создание графики
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.CalcButton = QtWidgets.QPushButton(self.centralwidget)
self.CalcButton.setGeometry(QtCore.QRect(310, 320, 211, 71))
font = QtGui.QFont()
font.setFamily("Bahnschrift Light")
font.setPointSize(12)
self.CalcButton.setFont(font)
self.CalcButton.setObjectName("CalcButton")
self.idpat = QtWidgets.QGroupBox(self.centralwidget)
self.idpat.setGeometry(QtCore.QRect(120, 40, 571, 191))
font = QtGui.QFont()
font.setFamily("Bahnschrift Light")
font.setPointSize(10)
self.idpat.setFont(font)
self.idpat.setAlignment(QtCore.Qt.AlignCenter)
self.idpat.setObjectName("idpat")
self.nam = QtWidgets.QLabel(self.idpat)
self.nam.setGeometry(QtCore.QRect(60, 45, 80, 30))
font = QtGui.QFont()
font.setFamily("Bahnschrift Light")
font.setPointSize(10)
self.nam.setFont(font)
self.nam.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.nam.setObjectName("nam")
#!!! QLineEdit
self.nameed = QtWidgets.QLineEdit(self.idpat) # - QTextEdit(self.idpat)
self.nameed.setGeometry(QtCore.QRect(150, 40, 400, 40))
self.nameed.setObjectName("nameed")
self.birdat = QtWidgets.QLabel(self.idpat)
self.birdat.setGeometry(QtCore.QRect(9, 95, 131, 30))
self.birdat.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.birdat.setObjectName("birdat")
self.gend = QtWidgets.QLabel(self.idpat)
self.gend.setGeometry(QtCore.QRect(60, 145, 80, 30))
self.gend.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.gend.setObjectName("gend")
self.combox1 = QtWidgets.QComboBox(self.idpat)
self.combox1.setGeometry(QtCore.QRect(150, 140, 51, 40))
self.combox1.setObjectName("combox1")
self.combox1.addItem("")
self.combox1.addItem("")
self.birdated = QtWidgets.QDateEdit(self.idpat)
self.birdated.setGeometry(QtCore.QRect(150, 90, 121, 40))
self.birdated.setObjectName("birdated")
self.glucon = QtWidgets.QLabel(self.centralwidget)
self.glucon.setGeometry(QtCore.QRect(60, 430, 231, 51))
font = QtGui.QFont()
font.setFamily("Bahnschrift Light")
font.setPointSize(12)
self.glucon.setFont(font)
self.glucon.setObjectName("glucon")
self.regButton = QtWidgets.QPushButton(self.centralwidget)
self.regButton.setGeometry(QtCore.QRect(550, 240, 141, 28))
font = QtGui.QFont()
font.setFamily("Bahnschrift Light")
font.setPointSize(12)
self.regButton.setFont(font)
self.regButton.setObjectName("regButton")
self.mmol = QtWidgets.QLabel(self.centralwidget)
self.mmol.setGeometry(QtCore.QRect(460, 430, 91, 51))
font = QtGui.QFont()
font.setFamily("Bahnschrift Light")
font.setPointSize(12)
self.mmol.setFont(font)
self.mmol.setObjectName("mmol")
self.resfin = QtWidgets.QLabel(self.centralwidget)
self.resfin.setGeometry(QtCore.QRect(310, 440, 131, 41))
font = QtGui.QFont()
font.setFamily("Bahnschrift Light")
font.setPointSize(12)
self.resfin.setFont(font)
self.resfin.setText("")
self.resfin.setObjectName("resfin")
#создание менюбара
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName("menubar")
self.menu = QtWidgets.QMenu(self.menubar)
self.menu.setObjectName("menu")
MainWindow.setMenuBar(self.menubar)
self.action_4 = QtWidgets.QAction(MainWindow)
self.action_4.setObjectName("action_4")
self.exit1 = QtWidgets.QAction(MainWindow)
self.exit1.setObjectName("exit1")
self.menu.addAction(self.action_4)
self.menu.addAction(self.exit1)
self.menubar.addAction(self.menu.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.CalcButton.setText(_translate("MainWindow", "Начать измерение"))
self.idpat.setTitle(_translate("MainWindow", "ID Пациента"))
self.nam.setText(_translate("MainWindow", "ФИО"))
self.nameed.setStatusTip(_translate("MainWindow", "Введите ФИО пациента"))
self.birdat.setText(_translate("MainWindow", "Дата рождения"))
self.gend.setText(_translate("MainWindow", "Пол"))
self.combox1.setStatusTip(_translate("MainWindow", "Выберите пол"))
self.combox1.setItemText(0, _translate("MainWindow", "М"))
self.combox1.setItemText(1, _translate("MainWindow", "Ж"))
self.birdated.setStatusTip(_translate("MainWindow", "Введите дату рождения пациента"))
self.glucon.setText(_translate("MainWindow", "Концентрация Глюкозы:"))
self.mmol.setText(_translate("MainWindow", "ммоль/л"))
self.menu.setTitle(_translate("MainWindow", "Меню"))
self.regButton.setStatusTip(_translate("MainWindow", "Сохранить инфо о пациенте"))
self.regButton.setText(_translate("MainWindow", "Записать"))
self.action_4.setText(_translate("MainWindow", "Справка"))
self.action_4.setStatusTip(_translate("MainWindow", "Узнать об авторах")) #сообщение в левом нижнем углу
self.action_4.setShortcut(_translate("MainWindow", "Ctrl+I")) #shortcut дает возможность назначить комбинацию кнопок
#выход из программы
self.exit1.setText(_translate("MainWindow", "Выход"))
self.exit1.setStatusTip(_translate("MainWindow", "Выйти из программы"))
self.exit1.setShortcut(_translate("MainWindow", "Ctrl+Shift+Q"))
class TableWidget(QTableWidget): # наследуем QTableWidget
def __init__(self):
super(TableWidget, self).__init__()
self.setGeometry(QtCore.QRect(100, 100, 450, 200))
# setRowCount(int) устанавливает количество строк в таблице,
# а setColumnCount(int) устанавливает количество столбцов.
# или вы можете напрямую указать количество строк и столбцов во время создания экземпляра;
self.setRowCount(1)
self.setColumnCount(4)
# setColumnWidth(int, int) устанавливает ширину столбца,
# первый параметр заполняет номер столбца, а
# второй параметр заполняет значение ширины.
# setRowCount(int, int) устанавливает высоту строки, параметры одинаковы;
self.setColumnWidth(0,130)
self.setRowHeight(0, 30)
# setHorizontalHeaderLabels(iterable) устанавливает заголовок строки, а
# setVerticalHeaderLabels устанавливает заголовок столбца;
self.setHorizontalHeaderLabels(['ФИО', 'Дата рождения', 'пол', 'результат'])
# Создайте экземпляр ячейки и добавьте ячейку в таблицу с помощью
# setItem(int, int, QTableWidgetItem).
# Первые два параметра типа int - это номер строки и номер столбца;
self.item_1 = QTableWidgetItem('Иванов И.И.')
self.setItem(0, 0, self.item_1)
# или так
self.setItem(0, 1, QTableWidgetItem('01.01.1990'))
self.setItem(0, 2, QTableWidgetItem('м'))
# Создаем класс для Главного окна
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.allButton = QtWidgets.QPushButton('Показать', self)
self.allButton.setGeometry(QtCore.QRect(270, 260, 141, 28))
self.allButton.clicked.connect(self.all_button)
self.CalcButton.clicked.connect(self.calc_button)
self.regButton.clicked.connect(self.reg_button)
self.action_4.triggered.connect(self.infowindow)
self.exit1.triggered.connect(self.exitapp)
self.tableWidget = TableWidget()
#функция выхода из программы
def exitapp(self):
self.close()
def infowindow(self):
msg = QMessageBox.information(self, 'Справка', 'Справка Справка Справка\nСправка Справка')
def all_button(self):
self.tableWidget.show()
def reg_button(self):
if not self.nameed.text():
msg = QMessageBox.information(self, 'Внимание', 'Введите ФИО')
return
# rowCount() получает количество строк, а columnCount() получает количество столбцов;
row = self.tableWidget.rowCount()
self.tableWidget.insertRow(row)
self.tableWidget.setItem(row, 0, QTableWidgetItem(self.nameed.text()))
self.tableWidget.setItem(row, 1, QTableWidgetItem(self.birdated.text()))
self.tableWidget.setItem(row, 2, QTableWidgetItem(self.combox1.currentText()))
self.nameed.clear()
def calc_button(self):
if not len(self.tableWidget.selectedIndexes()):
msg = QMessageBox.information(self, 'Внимание', 'Вы не выбрали пациента для расчета')
return
# тут делайте свои подсчеты
text = 'результат подсчета'
self.resfin.setText(text)
row = self.tableWidget.selectedIndexes()[0].row()
print(row)
self.tableWidget.setItem(row, 3, QTableWidgetItem(text))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())


