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()
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()
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
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)
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()
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)