我一直在尝试使用 QCalendarWidget 来选择稍后将使用的日期。
所以我创建了这个小部件,它显示并且一切看起来都很好。然后我在文本浏览器中打印选定的日期进行测试,我发现日期格式不好。
这是与此问题相关的代码:
from PyQt5 import QtGui, QtCore, QtWidgets, uic
class Window(QtWidgets.QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.ui = uic.loadUi('rent_creation.ui', self)
#the widgets are called calendarWidget_start_date_2 and calendarWidget_end_date_2
self.ui.activate_thescript.clicked.connect(self.activate_script)
self.show()
def activate_script(self):
global start_date
global end_date
start_date = self.ui.calendarWidget_start_date_2.selectedDate().toString()
end_date = self.ui.calendarWidget_end_date_2.selectedDate().toString()
#print data in text browser
text = "Start date: %s \n End date: %s \n" %(start_date, end_date)
self.ui.textBrowser.setText(text)
start_date = QtCore.QDate.currentDate()
end_date = QtCore.QDate.currentDate()
def run():
app = QtWidgets.QApplication(sys.argv)
GUI = Window()
sys.exit(app.exec_())
run()
Run Code Online (Sandbox Code Playgroud)
结果是:
Start date: …Run Code Online (Sandbox Code Playgroud) 我正试图让a QDateEdit在允许QCalendarWidget时显示(而不是仅仅点击向下箭头).例如,在我班上的某个地方,我应该可以说:
ui.datepicker.showCalendar()
Run Code Online (Sandbox Code Playgroud)
它应该加载日期选择器正下方的日历.
看起来我需要子类QDateEdit,因为这不起作用:
QDateEdit *de = new QDateEdit();
de->calendarWidget()->show();
Run Code Online (Sandbox Code Playgroud)
当你通过Qt的QDateTimeEdit.cpp源代码时,我也试过发送键盘命令,但似乎我的键盘快捷键被禁用了.
关于我要对子类做什么以使其工作的任何想法?我想的是:
class MyDateEdit : QDateEdit
{
Q_OBJECT
protected:
void mouseEvent(QEvent *event) {
this.calendarWidget().show();
}
};
Run Code Online (Sandbox Code Playgroud)
但唉,似乎也没有编译或正常工作.
我想在 CalendarWidget 中突出显示所选开始日期和结束日期之间的每一天。我的问题是,CalendarWidget 只允许 QTCreator 中的 SingleSelection,但表示其他内容可以通过编程方式更改。
我发现了一些使用 QPainter 和 PaintCell() 方法的提示,但我不知道从哪里开始。互联网对我的情况没有帮助。我尝试先在 ButtonClick 上更改单个日期,但即使这样也不起作用,您能给我如何使用它的建议吗?
btn_test_pressed(self):
painter = QPainter()
painter.setPen(QtGui.QPen(QtCore.Qt.green))
painter.fillRect(QtCore.QRectF(250, 250, 10, 10), 0, 5760)
rect = QRect()
date = datetime.datetime.now() - datetime.timedelta(1)
self.calendarWidget.paintCell(painter, rect, date)
Run Code Online (Sandbox Code Playgroud)