QDateTimeEdit установить пустое значение
Подскажите пожалуйста как полностью удалить текст из QDateTimeEdit?
В моей БД есть колонки с датами в формате TEXT, в этих колонках есть пустые ячейки.
Мне необходимо показать пустой QDateTimeEdit если в БД ячейка пуста.
Я нашел вот такой пример:
https://stackoverflow.com/questions/22500189/correct-use-of-the-clear-method-on-qdatetimeedit/72732839#72732839
Но он работает только при нажатии кнопки, а мне нужно удалить значение когда открывается окно по условию.
Спасибо.
Ответы (2 шт):
Просто пустое значение QDateTimeEdit не поддерживает, но можно сделать чтобы дата при отображении скрывалась. Это можно сделать двумя способами:
- Установить стиль для виджета, делающий текст прозрачным
- Программно скрыть отображение даты
Код с примером:
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QDateTime
import sys
class Window(QMainWindow):
def __init__(self):
super().__init__()
# setting geometry
self.setGeometry(100, 100, 500, 400)
self.datetimeedit = QDateTimeEdit(self)
self.datetimeedit.setGeometry(100, 100, 150, 35)
# Можно применить стиль для виджета (сделать текст прозрачным), если установлена минимальная дата,
# но в этом случае при выделении текста в виджете, дата будет видна
self.datetimeedit.setDateTime(QDateTime.fromTime_t(0))
self.datetimeedit.setStyleSheet('QWidget[text="01.01.1970 07:00"] { color: rgb(0,0,0,0);}')
self.button = QPushButton(self)
self.button.setText("hide/show")
self.button.setGeometry(255, 100, 80, 35)
self.button.clicked.connect(lambda: self.showHideDateTime())
self.show()
def showHideDateTime(self):
# Или можно программно скрыть виджет, отображающий дату (в детях QDateTimeEdit есть обычный QLineEdit)
edit = self.datetimeedit.findChild(QLineEdit, "qt_spinbox_lineedit")
if edit.isVisible():
edit.hide()
else:
edit.show()
App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())
Я просто соединил ваше желание с кодом, который вам подходит и ничего более.
import sys
import datetime
from PyQt5.Qt import *
class DateTimeEditDemo(QWidget):
def __init__(self):
super(DateTimeEditDemo, self).__init__()
self.vlayout = QVBoxLayout(self)
date_time_str = '18-09-2022 01:55:19'
self._str_date_time(date_time_str)
date_time_str = '' # <----
self._str_date_time(date_time_str)
date_time_str = '24-06-2022 08:57:00'
self._str_date_time(date_time_str)
date_time_str = '' # <----
self._str_date_time(date_time_str)
def _str_date_time(self, date_time_str):
try:
date_time_obj = datetime.datetime.strptime(date_time_str, '%d-%m-%Y %H:%M:%S')
#print (f"{date_time_obj} --- {type(date_time_obj)}")
dateTimeEdit = QDateTimeEdit(date_time_obj)
dateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
except Exception as e:
dateTimeEdit = QDateTimeEdit()
QTimer.singleShot(10, lambda: self.clearDate(dateTimeEdit))
self.vlayout.addWidget(dateTimeEdit)
def clearDate(self, dateTimeEdit):
dateTimeEdit.findChild(QLineEdit).setText('')
if __name__ == '__main__':
app = QApplication(sys.argv)
w = DateTimeEditDemo()
w.resize(300, 120)
w.show()
sys.exit(app.exec_())
