RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1064309
Accepted
novol
novol
Asked:2020-12-29 20:39:23 +0000 UTC2020-12-29 20:39:23 +0000 UTC 2020-12-29 20:39:23 +0000 UTC

在 PyQt5 中编写条件

  • 772

在每位患者附近都会有一个按钮Выселить,按下该按钮可以在出院时将患者逐出病房,这将从患者数据库中删除他的姓名以释放空间。

患者的分布将按年龄划分,分为两个年龄类别:

  • 18-45岁
  • 46+:

在每个房间中,将计算患者的平均年龄,视情况而定,18-45岁年龄组的患者将被分配到患者平均年龄低于45岁的房间,46岁以上年龄组的患者将被分配到分配到患者平均年龄在45岁以上的病房,但前提是此类病房有空位。

如果没有按年龄划分的患者住宿选择,他们将被安置在与其性别对应的房间内的任何免费床位上,但需视供应情况而定。

如果根本没有空位,病人就会被安置在走廊里,并会出现相应的信息:“没有空位。病人(病人资料)将被安置在大厅。

安置在大厅的病人名单将显示在每个科室的房间列表下方,标题为“临时住宿(大厅)”,格式与病房病人名单类似,但没有“驱逐”按钮将有一个“安置在病房”按钮,通过手动选择允许重新安置患者的空置病房的编号,可以将患者安置在病房而不是大厅。

在此处输入图像描述

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit, \
    QTableView, QGridLayout, QListWidget, QLabel, QListView, QTabWidget, QFrame, \
    QHeaderView, QFormLayout                                                        # +++
from PyQt5.QtCore import *
from PyQt5.QtGui import *


class Example(QWidget):
    def __init__(self):
        super().__init__()

        self.table = QTableView(self)
        self.model = QStandardItemModel()
        self.table.setModel(self.model)
        self.model.setHorizontalHeaderLabels(["Имя", "Пол", "Возраст", "Отделение", "Диагноз", "Палата"])

        self.table.setAlternatingRowColors(True)                                    # +
        self.table.horizontalHeader().setSectionResizeMode(4, QHeaderView.Stretch)  # +

        self.btn = QPushButton("Отправить")
        self.btn.clicked.connect(self.add)

        self.years = QLabel('Возраст', alignment=Qt.AlignRight | Qt.AlignVCenter)
        self.years.setMaximumWidth(60)
        self.years_line = QLineEdit(placeholderText='Введите возраст...')
        self.diagnose_line = QLineEdit(placeholderText='Введите диагноз...')
        self.diagnose = QLabel('Диагноз', alignment=Qt.AlignRight | Qt.AlignVCenter)
        self.otd_line = QLineEdit(placeholderText='Введите отделение...')
        self.otd = QLabel('Отделение', alignment=Qt.AlignRight | Qt.AlignVCenter)
        self.gender_line = QLineEdit(placeholderText='Введите пол...')
        self.gender = QLabel('Пол', alignment=Qt.AlignRight | Qt.AlignVCenter)
        self.name_line = QLineEdit(placeholderText='Введите имя...')
        self.name = QLabel('Имя', alignment=Qt.AlignRight | Qt.AlignVCenter)
        self.init()

    def init(self):
        grid = QGridLayout(self)
        grid.addWidget(self.name, 1, 0)
        grid.addWidget(self.name_line, 1, 1, 1, 3)
        grid.addWidget(self.gender, 2, 0)
        grid.addWidget(self.gender_line, 2, 1, 1, 3)
        grid.addWidget(self.years, 3, 0)
        grid.addWidget(self.years_line, 3, 1, 1, 3)
        grid.addWidget(self.otd, 4, 0)
        grid.addWidget(self.otd_line, 4, 1, 1, 3)
        grid.addWidget(self.diagnose, 5, 0)
        grid.addWidget(self.diagnose_line, 5, 1, 1, 3)
        grid.addWidget(self.btn, 6, 1, 1, 3) #, 1, -10)
        grid.addWidget(self.table, 7, 0, 5, 4)

def add(self):
    p = 45
    i = 0
    rows = self.model.rowCount()
    columns = self.model.columnCount()
    for column in range(columns):
        if column == 0:
            self.model.setItem(rows, column, QStandardItem(self.name_line.text()))
        if column == 1:
            self.model.setItem(rows, column, QStandardItem(self.gender_line.text()))
        if column == 2:
            self.model.setItem(rows, column, QStandardItem(self.years_line.text()))
        if column == 3:
            self.model.setItem(rows, column, QStandardItem(self.otd_line.text()))
        if column == 4:
            self.model.setItem(rows, column, QStandardItem(self.diagnose_line.text()))
        if column == 5:
            if self.years_line <= p:
                self.table.item(self.model.index(i, 5), "1")
        if column == 6:
            self.table.setIndexWidget(self.model.index(i, 6), self.del_btn)

        self.name_line.clear()
        self.diagnose_line.clear()
        self.otd_line.clear()
        self.years_line.clear()
        self.gender_line.clear()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyle("Fusion")
    ex = Example()
    ex.resize(700, 500)
    ex.setWindowTitle('Больница')
    ex.setWindowIcon(QIcon('key.png'))
    ex.show()
    sys.exit(app.exec_())
python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    S. Nick
    2020-12-31T00:36:59Z2020-12-31T00:36:59Z

    你问非常全球性的问题,这不是很好。

    我对医学不太了解,因此不明白为什么有必要按年龄将患者安置在病房?

    我看到你的任务是这样的:

    • 一些字段已从 更改QLineEdit为QComboBox
    • Возраст变成了Дата рождения—— QDateEdit со встроенным календарем!
    • 以字典的形式开了一家小医院listPalat
    • 表你有机会сортировать данные!
    • редактировать在表里你只能团Диагноз!
    • 添加了按钮单击操作Выписать
    • 添加了按钮单击操作Поселить в палату

    试试看。

    import sys
    from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5.Qt import *
    
    
    class Example(QWidget):
        def __init__(self, palats):                                        # + palats
            super().__init__()
    
            self.palats = palats
    
            self.table = QTableView(self)
            self.table.doubleClicked.connect(self.onDoubleClick)
            self.table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)  # +++
            self.table.setSortingEnabled(True)                                      # +++
            self.model = QStandardItemModel()
            self.table.setModel(self.model)
    
            self.model.setHorizontalHeaderLabels(["Имя", "Пол", "Возраст", "Отделение", "Диагноз", "Палата"])
            self.table.setAlternatingRowColors(True)  
            self.table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
            self.table.horizontalHeader().setSectionResizeMode(4, QHeaderView.Stretch)
    
            self.btn_reg = QPushButton("Зарегистрировать")
            self.btn_reg.clicked.connect(self.add)
            self.btn_vip = QPushButton("Выписать")                                   # +++
            self.btn_vip.clicked.connect(self.vip)
            self.btn_pere = QPushButton("Поселить в палату")                         # +++
            self.btn_pere.clicked.connect(self.pere)
    
            self.name = QLabel('Имя', alignment=Qt.AlignRight | Qt.AlignVCenter)
            self.name_line = QLineEdit(placeholderText='Введите имя...')
    
            self.gender = QLabel('Пол', alignment=Qt.AlignRight | Qt.AlignVCenter)        
            self.cb_gender = QtWidgets.QComboBox()                                 # QComboBox
            self.cb_gender.addItems(["ж", "м"])
    
            self.years = QLabel('Дата рождения', alignment=Qt.AlignRight | Qt.AlignVCenter)
            self.years.setMaximumWidth(80)
            self.date = QDateEdit()                                                # QDateEdit
            self.date.setCalendarPopup(True)                                       # + setCalendarPopup 
    
            self.otd = QLabel('Отделение', alignment=Qt.AlignRight | Qt.AlignVCenter)
            self.cb_otd = QtWidgets.QComboBox()                                    # QComboBox
            self.cb_otd.addItems(["Терапевтическое", "Хирургическое", 
                                  "Кардиохирургическое", "Травматологическое"])
    
            self.diagnose_line = QLineEdit(placeholderText='Введите диагноз...')
            self.diagnose = QLabel('Диагноз', alignment=Qt.AlignRight | Qt.AlignVCenter)
    
            self.init()
    
        def init(self):
            grid = QGridLayout(self)
            grid.addWidget(self.name, 1, 0)
            grid.addWidget(self.name_line, 1, 1, 1, 3)
            grid.addWidget(self.gender, 2, 0)
            grid.addWidget(self.cb_gender, 2, 1, 1, 3)
            grid.addWidget(self.years, 3, 0)
            grid.addWidget(self.date, 3, 1, 1, 3)
            grid.addWidget(self.otd, 4, 0)
            grid.addWidget(self.cb_otd, 4, 1, 1, 3)
            grid.addWidget(self.diagnose, 5, 0)
            grid.addWidget(self.diagnose_line, 5, 1, 1, 3)
    
            grid.addWidget(self.btn_reg, 6, 1)  
            grid.addWidget(self.btn_vip, 6, 2) 
            grid.addWidget(self.btn_pere, 6, 3) 
    
            grid.addWidget(self.table, 7, 0, 5, 4)
    
        def add(self):
            rows = self.model.rowCount()
            if not self.name_line.text():
                msg = QMessageBox.information(self, 'ВНИМАНИЕ !', 'Заполните данные пациента.')
                return
    
            pl = ''
            if self.cb_gender.currentText() == 'ж':
                for palata, list_mest in self.palats['0'].items():
                    for i, v in enumerate(list_mest):
                        if v == ' ':
                            self.palats['0'][palata][i] = self.name_line.text()
                            pl = palata
                            break
                    if pl: break
                if not pl:
                    for palata, list_mest in self.palats['2'].items():
                        for i, v in enumerate(list_mest):
                            if v[0] == ' ':                                             
                                self.palats['2'][palata][i][0] = self.name_line.text()  
                                self.palats['2'][palata][i][1] = '0'                    
                                pl = palata
                                break
            elif self.cb_gender.currentText() == 'м':
                for palata, list_mest in self.palats['1'].items():
                    for i, v in enumerate(list_mest):
                        if v == ' ':
                            self.palats['1'][palata][i] = self.name_line.text()
                            pl = palata
                            break
                    if pl: break
                if not pl:
                    for palata, list_mest in self.palats['2'].items():
                        for i, v in enumerate(list_mest):
                            if v[0] == ' ':
                                self.palats['2'][palata][i][0] = self.name_line.text()
                                self.palats['2'][palata][i][1] = '1'                    
                                pl = palata
                                break
    
            if not pl:
                msg = QMessageBox.information(self, 'ВНИМАНИЕ !', 
                      f'Нет свободных мест для <b>{self.cb_gender.currentText()}</b>.<br>Надо кого-то выписывать!')
            else:
                self.model.setItem(rows, 0, QStandardItem(self.name_line.text()))
                self.model.setItem(rows, 1, QStandardItem(self.cb_gender.currentText()))
                self.model.setItem(rows, 2, QStandardItem(self.date.date().toString("dd.MM.yyyy")))
                self.model.setItem(rows, 3, QStandardItem(self.cb_otd.currentText()))
                self.model.setItem(rows, 4, QStandardItem(self.diagnose_line.text()))
                self.model.setItem(rows, 5, QStandardItem(pl)) 
    
            self.name_line.clear()
            self.diagnose_line.clear()
            self.name_line.setFocus()                                   # +
    
    
        def onDoubleClick(self, index):                                 # +++
            if index.column() == 4:
                self.table.setEditTriggers(QTableView.DoubleClicked | QTableView.EditKeyPressed)
            else:
                self.table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
    
        def vip(self):
            idx = self.table.currentIndex()
            if idx.row() == -1:
                msg = QMessageBox.information(self, 'ВНИМАНИЕ !', 'Выберите пациента для выписки.')
                return
    
            name = self.table.model().item(idx.row(), 0).text() 
            if QMessageBox.question(self, 'ВНИМАНИЕ !', 
                    f"Вы уверены, что хотите выписать <b>{name}</b> ?") == QMessageBox.Yes:
                pl = self.table.model().item(idx.row(), 5).text()
                gender_ = self.table.model().item(idx.row(), 1).text()
    
                if pl == 'Холл':
                    gender = '0' if gender_ == 'ж' else '1'
                    ii = self.palats['2'][pl].index([name, gender])          
                    self.palats['2'][pl][ii] = [' ', ' ']
                else:
                    gender = '0' if (pl == 'Палата1' or pl == 'Палата2') else '1' 
                    ii = self.palats[gender][pl].index(name)          
                    self.palats[gender][pl][ii] = ' '
    
                self.model.removeRow(idx.row())
                msg = QMessageBox.information(self, 'ВНИМАНИЕ !', 
                      f'Пациент <b>{name}</b> - выписан из палаты <b>{pl}</b>.')
    
        def pere(self):
            k_m_x = [ i for i in self.palats['2']['Холл'] if i[0] != ' ' ]
            if not k_m_x:
                msg = QMessageBox.information(self, 'ВНИМАНИЕ !', 
                      f'Пациентов для переселкния из Холлa - <b>Нет</b>.')
                return
    
            for name, gender in k_m_x:    # Холл
                fl_break = False
                for pl, lm in self.palats[gender].items():        
                    for i, m in enumerate(lm):
                        if m == ' ':
                            self.palats[gender][pl][i] = name
    
                            ii = self.palats['2']['Холл'].index([name, gender])
                            self.palats['2']['Холл'][ii] = [' ', ' ']
    
                            rows = self.model.rowCount()
                            for r in range(rows):
                                if self.table.model().item(r, 0).text() == name:
                                    self.model.setItem(r, 5, QStandardItem(pl))
                                    fl_break = True
                                    break
                        if fl_break: break
                    if fl_break: break    
    
    
    # Какое-то небольшое отделение больницы
    listPalat = {
        '0':{                                     # ж
            'Палата1': [' ', ' ',],
            'Палата2': [' ', ' ', ' ', ' '],
        },
        '1':{                                     # м
            'Палата3': [' ', ' ', ' '],
            'Палата4': [' ', ' ', ' '],
        },
        '2':{
            'Холл': [[' ', ' '], [' ', ' '], [' ', ' '], [' ', ' '], [' ', ' '], [' ', ' ']],
        },
    }            
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        default_font = QFont("Times", 11, QFont.Bold)
        app.setFont(default_font)
        app.setStyle("Fusion")
        ex = Example(listPalat)                                  # + listPalat
        ex.resize(700, 500)
        ex.setWindowTitle('Больница')
        ex.setWindowIcon(QIcon('key.png'))
        ex.show()
        sys.exit(app.exec_())
    

    在此处输入图像描述

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5