Exemplo n.º 1
0
    def initUI(self):
        lbl = QLabel('QTimeEdit')

        datetimeedit = QDateTimeEdit(self)
        datetimeedit.setDateTime(QDateTime.currentDateTime())
        datetimeedit.setDateTimeRange(QDateTime(1900, 1, 1, 00, 00, 00),
                                      QDateTime(2100, 1, 1, 00, 00, 00))
        # QDateTimeEdit 클래스를 이용해서 날짜, 시간 편집 위젯(datetimeedit)을
        # 하나 만들어줍니다.
        #
        # setDateTime 메서드에 QDateTime.currentDateTime()을
        # 입력해서 프로그램이 실행될 때 현재 날짜와 시간으로 표시되도록 합니다.
        #
        # setDateTimeRange를 이용하면 사용자가 선택할 수 있는 시간의 범위를 제한할 수 있습니다.
        datetimeedit.setDisplayFormat('yyyy.MM.dd hh:mm:ss')
        # setDisplayFormat 메서드를 이용해서 시간이 'yyyy.MM.dd hh:mm:ss'의
        # 형식으로 표시되도록 설정했습니다.

        vbox = QVBoxLayout()
        vbox.addWidget(lbl)
        vbox.addWidget(datetimeedit)
        vbox.addStretch()
        # 수직 박스 레이아웃을 이용해서 라벨과 날짜,
        # 시간 편집 위젯을 수직으로 배치하고, 전체 위젯의 레이아웃으로 설정합니다.

        self.setLayout(vbox)

        self.setWindowTitle('QDateTimeEdit')
        self.setGeometry(300, 300, 300, 200)
        self.show()
Exemplo n.º 2
0
class DateTimeEditDemo(QWidget):
    """主窗口"""
    def __init__(self, parent=None):
        super().__init__(parent=parent)
        self.setWindowTitle("QDateTimeEdit 使用")
        self.resize(320, 100)
        date_time = QDateTime.currentDateTime()

        self.datetime_edit = QDateTimeEdit(date_time)  # 初始化时设置初始值为当前日期时间
        # self.datetime_edit.setDateTime(date_time)
        self.datetime_edit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")  # 设置显示格式
        self.datetime_edit.setDateTimeRange(date_time.addYears(-1),
                                            date_time.addYears(1))  # 设置时间范围
        self.datetime_edit.setCalendarPopup(True)  # 允许使用Calendar

        self.datetime_edit.dateTimeChanged.connect(
            self.datetime_change)  # 会向槽函数传递QDateTime
        self.datetime_edit.dateChanged.connect(
            self.date_change)  # 会向槽函数传递QDate
        self.datetime_edit.timeChanged.connect(
            self.time_change)  # 会向槽函数传递QTime

        self.button = QPushButton()
        self.button.setText("获得日期和时间")
        self.button.clicked.connect(self.btn_click)
        self.status_bar = QStatusBar()

        vbox = QVBoxLayout(self)
        vbox.addWidget(self.datetime_edit)
        vbox.addWidget(self.button)
        vbox.addWidget(self.status_bar)

    def datetime_change(self, date_time):
        self.status_bar.showMessage(date_time.__str__())

    def date_change(self, date):
        self.status_bar.showMessage(date.__str__())

    def time_change(self, time):
        self.status_bar.showMessage(time.__str__())

    def btn_click(self, event):
        date_time = self.datetime_edit.dateTime()
        max_date_time = self.datetime_edit.maximumDateTime()
        max_date = self.datetime_edit.maximumDate()
        max_time = self.datetime_edit.maximumTime()
        min_date_time = self.datetime_edit.minimumDateTime()
        min_date = self.datetime_edit.minimumDate()
        min_time = self.datetime_edit.minimumTime()
        format_str = f"max_date_time: {max_date_time}\nmax_date: {max_date}\nmax_time: {max_time}\n\
                       min_date_time: {min_date_time}\nmin_time: {min_time}\nmin_time: {min_time}\n{event}"

        _ = QMessageBox.information(self, "显示QDateTime中的一些数据", format_str)
    def initUI(self):
        label = QLabel('QTimeEdit')
        label.setAlignment(Qt.AlignCenter)

        time = QTimeEdit(self)
        time.setTime(QTime.currentTime())
        time.setTimeRange(QTime(00, 00, 00), QTime.currentTime())
        time.setDisplayFormat('a:hh:mm:ss.zzz')

        label2 = QLabel('QDateEdit')
        label2.setAlignment(Qt.AlignCenter)

        self.date_edit = QDateEdit(self)
        self.date_edit.setDate(QDate.currentDate())
        self.date_edit.setDateRange(QDate(2000, 1, 1), QDate.currentDate())
        # self.date_edit.setDisplayFormat('yyyy년 MMMM d일')
        self.date_edit.dateChanged.connect(self.dateChange)

        self.label3 = QLabel('이곳에 QDateEdit에서 선택된 값이 나타납니다.')
        self.label3.setAlignment(Qt.AlignCenter)

        label4 = QLabel('QDateTimeEdit')
        label4.setAlignment(Qt.AlignCenter)

        label5 = QLabel(self)
        label5.setAlignment(Qt.AlignCenter)
        label5.setText(
            f'QDateTime \n 현재 시간은 {QDateTime.currentDateTime().toString("yyyy년 MMMM d일 ap hh시 mm분 ss초.zzz")} 입니다.'
        )

        dt_edit = QDateTimeEdit(self)
        dt_edit.setDateTimeRange(QDateTime(2020, 1, 1, 00, 00, 00),\
                                 QDateTime(2021, 1, 1, 00, 00, 00))
        dt_edit.setDisplayFormat('yyyy.MM.dd hh:mm:ss')

        vbox = QVBoxLayout()
        vbox.addWidget(label)
        vbox.addWidget(time)
        vbox.addWidget(label2)
        vbox.addWidget(self.date_edit)
        vbox.addWidget(self.label3)
        vbox.addWidget(label4)
        vbox.addWidget(label5)
        vbox.addWidget(dt_edit)

        self.setLayout(vbox)

        self.setWindowTitle('QTime, QDateEdit, QDateTimeEdit')
        self.setGeometry(300, 300, 400, 300)
        self.show()
Exemplo n.º 4
0
 def group_datetime_spinbox(self):
     group2 = QGroupBox('QDateTimeEdit')
     lbl = QLabel('QDateTimeEdit')
     date_time_edit = QDateTimeEdit(self)
     date_time_edit.setDateTime(QDateTime.currentDateTime())
     date_time_edit.setDateTimeRange(QDateTime(1900, 1, 1, 00, 00, 00),
                                     QDateTime(2100, 1, 1, 00, 00, 00))
     date_time_edit.setDisplayFormat('yyyy-MM-dd hh:mm:ss')
     date_time_edit.dateTimeChanged.connect(self.datetime_value_change)
     self.lbl5 = QLabel(
         date_time_edit.dateTime().toString('yyyy-MM-dd hh:mm:ss'))
     layout_group5 = QHBoxLayout()
     layout_group5.addWidget(lbl)
     layout_group5.addWidget(date_time_edit)
     layout_group5.addWidget(self.lbl5)
     return layout_group5
Exemplo n.º 5
0
    def initUI(self):
        lb = QLabel('QTimeEdit :')

        dte = QDateTimeEdit(self)
        dte.setDateTime(QDateTime.currentDateTime())
        dte.setDateTimeRange(
                    QDateTime(1900, 1, 1, 00, 00, 00),
                    QDateTime(2100, 1, 1, 00, 00, 00),
                )
        dte.setDisplayFormat('yyyy.MM.dd hh:mm:ss')

        vbox = QVBoxLayout()
        vbox.addWidget(lb)
        vbox.addWidget(dte)
        vbox.addStretch()

        self.setLayout(vbox)
Exemplo n.º 6
0
    def initUI(self):
        lbl = QLabel('QTimeEdit')

        datetimeedit = QDateTimeEdit(self)
        datetimeedit.setDateTime(QDateTime.currentDateTime())
        datetimeedit.setDateTimeRange(QDateTime(1900, 1, 1, 00, 00, 00),
                                      QDateTime(2100, 1, 1, 00, 00, 00))
        datetimeedit.setDisplayFormat('yyyy.MM.dd hh:mm:ss')

        vbox = QVBoxLayout()
        vbox.addWidget(lbl)
        vbox.addWidget(datetimeedit)
        vbox.addStretch()

        self.setLayout(vbox)

        self.setWindowTitle('QDateTimeEdit')
        self.setGeometry(300, 300, 300, 200)
        self.show()
Exemplo n.º 7
0
class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.datetime = QDateTime.currentDateTime()
        self.stats_url = ""  #grafana web url

        # connect to sql
        self.conn = psycopg2.connect("host= dbname= user= password="******"SELECT * from benji ORDER BY in_ts DESC LIMIT 1"
        self.cur.execute(sql)
        latest_row = self.cur.fetchone()
        if latest_row[3] == None:
            self.status = 'IN'
            self.confirm_msg = "Latest Status: {}, {}".format(
                self.status, datetime.strftime(latest_row[2],
                                               "%Y-%m-%d-%H:%M"))
        else:
            self.status = 'OUT'
            self.confirm_msg = "Latest Status: {}, {}".format(
                self.status, datetime.strftime(latest_row[3],
                                               "%Y-%m-%d-%H:%M"))

        # get images
        self.img_path = '/img/'
        self.sleep_img = QPixmap(self.img_path + 'sleep.png')
        self.sleepy_img = QPixmap(self.img_path + 'sleepy.png')
        self.awake_img = QPixmap(self.img_path + 'awake.png')
        self.in_img = QPixmap(self.img_path + 'in.png')
        self.out_img = QPixmap(self.img_path + 'out.png')
        self.in_grey_img = QPixmap(self.img_path + 'in_grey.png')
        self.out_grey_img = QPixmap(self.img_path + 'out_grey.png')
        self.time_img = QPixmap(self.img_path + 'time_img.png')
        self.msg_img = QPixmap(self.img_path + 'msg_img.png')
        self.stats_img = QPixmap(self.img_path + 'stats_img.png')

        self.initUI()

    def initUI(self):
        grid = QGridLayout()
        self.setLayout(grid)

        # title_img QLabel
        self.title_img = QLabel()
        self.title_img.setStyleSheet(self.hover_css())
        self.title_img.setAlignment(Qt.AlignCenter)
        grid.addWidget(self.title_img, 0, 0, 1, 3)

        # ts QDateTimeEdit
        time_label = QLabel()
        time_label.setPixmap(self.time_img)
        grid.addWidget(time_label, 1, 0)

        # now_btn QRadioButton
        self.now_btn = QRadioButton('Now')
        self.now_btn.setChecked(True)
        self.now_btn.setCursor(QCursor(Qt.PointingHandCursor))
        grid.addWidget(self.now_btn, 1, 1, 1, 1)

        # manual_btn QRadioButton
        self.manual_btn = QRadioButton('Manually')
        self.manual_btn.setCursor(QCursor(Qt.PointingHandCursor))
        grid.addWidget(self.manual_btn, 1, 2, 1, 1)

        # ts QDateTimeEdit
        self.ts = QDateTimeEdit(self)
        self.ts.setDateTime(self.datetime)
        self.ts.setDateTimeRange(QDateTime(1900, 1, 1, 00, 00, 00),
                                 QDateTime(2100, 1, 1, 00, 00, 00))
        self.ts.setDisplayFormat('yyyy.MM.dd hh:mm')
        grid.addWidget(self.ts, 2, 2, 1, 1)

        # msg label
        msg_label = QLabel()
        msg_label.setPixmap(self.msg_img)
        grid.addWidget(msg_label, 3, 0)

        # msg QTextEdit
        self.msg = QTextEdit()
        self.msg.setStyleSheet(
            "background-color: white; border-radius: 10px; border: 3px solid white;"
        )
        self.msg.installEventFilter(self)
        grid.addWidget(self.msg, 4, 0, 1, 3)

        # in_btn, out_btn Qlabel
        self.in_btn = QLabel()
        self.in_btn.setAlignment(Qt.AlignCenter)
        self.in_btn.setCursor(QCursor(Qt.PointingHandCursor))

        self.out_btn = QLabel()
        self.out_btn.setAlignment(Qt.AlignCenter)
        self.out_btn.setCursor(QCursor(Qt.PointingHandCursor))

        grid.addWidget(self.in_btn, 5, 1)
        grid.addWidget(self.out_btn, 5, 2)

        # stats_btn QLabel
        stats_btn = QLabel()
        stats_btn.setPixmap(self.stats_img)
        stats_btn.setAlignment(Qt.AlignLeft)
        stats_btn.setCursor(QCursor(Qt.PointingHandCursor))
        grid.addWidget(stats_btn, 5, 0)

        # confirm text QLabel
        self.confirmlabel = QLabel(self.confirm_msg, self)
        grid.addWidget(self.confirmlabel, 6, 0, 1, 3)

        # conditional images
        if self.status == 'IN':
            self.in_btn.setPixmap(self.in_grey_img)
            self.out_btn.setPixmap(self.out_img)
            self.title_img.setPixmap(self.awake_img)
        else:
            self.in_btn.setPixmap(self.in_img)
            self.out_btn.setPixmap(self.out_grey_img)
            self.title_img.setPixmap(self.sleep_img)

        ### EVENT ###
        clickable(self.in_btn).connect(self.inCheck)
        clickable(self.out_btn).connect(self.outCheck)
        clickable(stats_btn).connect(self.openWeb)

        self.setWindowTitle('BENJI')
        self.setStyleSheet("background-color: rgb(220,208,255);")
        self.setGeometry(300, 300, 300, 200)
        self.show()

    def eventFilter(self, obj, event):
        if event.type() == QEvent.KeyPress and event.key() == Qt.Key_Return:
            if self.status == 'OUT':
                self.inCheck()
            else:
                self.outCheck()
        return super().eventFilter(obj, event)

    def hover_css(self):
        hover_css_text = "".join([
            "QLabel{min-height:100px;}", "QLabel:hover{image:url(",
            self.img_path, "sleepy.png);}"
        ])
        return hover_css_text

    def inCheck(self):
        self.status = 'IN'
        self.datetime = QDateTime.currentDateTime()
        self.save()

        self.title_img.setPixmap(self.awake_img)
        self.in_btn.setPixmap(self.in_grey_img)
        self.out_btn.setPixmap(self.out_img)

    def outCheck(self):
        self.status = 'OUT'
        self.datetime = QDateTime.currentDateTime()
        self.save()

        self.title_img.setPixmap(self.sleep_img)
        self.out_btn.setPixmap(self.out_grey_img)
        self.in_btn.setPixmap(self.in_img)

    def openWeb(self):
        webbrowser.open(self.stats_url)