Это не повторяющийся вопрос Как вывести sql данные на QCalendarWidget
Это дополнение к этому вопросу.
Это также не дубликат Выделите интервал даты в виджете календаря Qt5 , поскольку он просто выделяет ячейки, когда пользователь выбирает их на текущей странице QT, а не с использованием данных SQL. Это также не повторяющийся вопрос Раскраска ячейки PyQt5 QCalendarWidget и печать данных внутри ячеек , так как ответ не делает то, что я хочу, чтобы моя программа делала, чтобы изменить цвет фона определенной ячейки календарь, используя мою базу данных sql, чтобы сделать это, а также я не мог получить ответ на работу.
В первом связанном вопросе я спрашивал, как пользователь нажмет дату, и он выведет текст, соответствующий к этой дате, если эта дата была в базе данных sql. С некоторой помощью мне удалось заставить это работать. Теперь я хочу выделить эти даты синим фоном, например, как текущая дата выделяется красным фоном.
Моя страница QT, которую я сделал, выглядит так:
Моя QT-страница
Моя база данных такая:
Моя база данных
И мой код такой:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Calendar.ui'
#
# Created by: PyQt5 UI code generator 5.14.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
import sqlite3
import datetime
import PyQt5
from PyQt5.QtCore import QDate, Qt
from PyQt5.QtGui import (QColor, QFont, QTextCharFormat, QTextLength,
QTextTableFormat)
from PyQt5.QtWidgets import (QApplication, QComboBox, QDateTimeEdit,
QHBoxLayout, QLabel, QMainWindow, QSpinBox, QTextBrowser, QVBoxLayout,
QWidget)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1200, 900)
MainWindow.setMinimumSize(QtCore.QSize(0, 0))
MainWindow.setMaximumSize(QtCore.QSize(1200, 900))
MainWindow.setStyleSheet("background-color: rgb(200, 200, 200);")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.Header = QtWidgets.QTextEdit(self.centralwidget)
self.Header.setEnabled(False)
self.Header.setGeometry(QtCore.QRect(-10, 0, 1300, 110))
self.Header.setMinimumSize(QtCore.QSize(1300, 110))
self.Header.setMaximumSize(QtCore.QSize(1300, 110))
self.Header.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"border-color: rgb(255, 255, 255);\n"
"border-width : 1.2px;\n"
"border-style:inset;")
self.Header.setObjectName("Header")
self.LECTURP = QtWidgets.QLabel(self.centralwidget)
self.LECTURP.setGeometry(QtCore.QRect(512, 2, 180, 61))
self.LECTURP.setStyleSheet("color: rgb(0, 176, 240);\n"
"font: 8pt \"MS Shell Dlg 2\";\n"
"text-decoration: underline;\n"
"background-color: rgb(255, 255, 255);\n"
"font: 28pt \"Calbri\";\n"
"text-decoration: underline;")
self.LECTURP.setObjectName("LECTURP")
self.LecturpBanner = QtWidgets.QLabel(self.centralwidget)
self.LecturpBanner.setGeometry(QtCore.QRect(320, 60, 561, 31))
self.LecturpBanner.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"color: rgb(0, 176, 240);\n"
"font: 14pt \"Calibri\";")
self.LecturpBanner.setObjectName("LecturpBanner")
self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget)
self.calendarWidget.setGeometry(QtCore.QRect(30, 110, 1141, 661))
self.calendarWidget.setStyleSheet("alternate-background-color: rgb(255, 255, 255);\n"
"font: 75 16pt \"MS Shell Dlg 2\";\n"
"background-color: rgb(200, 200, 200);\n"
"selection-background-color: rgb(255, 0, 0);")
self.calendarWidget.setObjectName("calendarWidget")
self.DateInfoOutput = QtWidgets.QLabel(self.centralwidget)
self.DateInfoOutput.setGeometry(QtCore.QRect(30, 778, 1141, 97))
self.DateInfoOutput.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"border-color: rgb(0, 0, 0);\n"
"font: 16pt \"Calibri\";\n"
"border-width : 1.2px;\n"
"border-style:inset;")
self.DateInfoOutput.setText("")
self.DateInfoOutput.setObjectName("DateInfoOutput")
self.WeekNumber = QtWidgets.QLabel(self.centralwidget)
self.WeekNumber.setGeometry(QtCore.QRect(56, 168, 113, 49))
self.WeekNumber.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"font: 16pt \"MS Shell Dlg 2\";")
self.WeekNumber.setObjectName("WeekNumber")
self.calendarWidget.raise_()
self.Header.raise_()
self.LECTURP.raise_()
self.LecturpBanner.raise_()
self.DateInfoOutput.raise_()
self.WeekNumber.raise_()
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.editor = QTextBrowser()
self.calendarWidget.clicked[QDate].connect(self.dateClicked)
def dateClicked(self, clickedDate):
connection = sqlite3.connect("Calendardatabase.db")
crsr = connection.cursor()
crsr.execute(
'SELECT Text FROM Calendar WHERE Day = ? AND Month = ? AND YEAR = ?',
(clickedDate.day(), clickedDate.month(), clickedDate.year()))
result = crsr.fetchone()
if result:
self.DateInfoOutput.setText(result[0])
else:
self.DateInfoOutput.setText('')
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.LECTURP.setText(_translate("MainWindow", "LECTURP"))
self.LecturpBanner.setText(_translate("MainWindow", "Lecture, Exam, Coursework, Timetable, Uploader and Reminder Program."))
self.WeekNumber.setText(_translate("MainWindow", "Week No."))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Я пытался следовать вашим комментариям, и я сделал это:
crsr.execute('SELECT Date FROM Calendar2 WHERE Number = ?', (Count,))
Dates3 = crsr.fetchone()
Dates3 = str(Dates3)
Dates3 = Dates3.replace("'", "")
Dates3 = Dates3.replace('(', '')
Dates3 = Dates3.replace(')', '')
Dates3 = Dates3.replace(',', '')
print(All_Dates)
print(Dates3)
Dates3 = Dates3.replace('/', ',')
self.dates = { QDate(2020, 3, 20): ["Um Sure"] }
format = QTextCharFormat()
format.setBackground(QColor("salmon"))
self.calendarWidget.setDateTextFormat(Dates3, format)
, когда я пытаюсь запустить это, я получаю эту ошибку:
Message = setDateTextFormat (self, Union [QDate, datetime.date], QTextCharFormat): аргумент 1 имеет неожиданный тип 'str'
Я пытался использовать переменную self.dates, но это также не сработало. Я не уверен, как преобразовать дату в формат, приемлемый для части вывода QDate.
Хорошо, все работает, но когда я сделал это, в то время как l oop, мне просто стало интересно, что я делаю неправильно python или неверный QT.
Count = 1
while Count <= list3:
connection = sqlite3.connect("Calendardatabase.db")
# This is the code for the database cursor
Current_Day = datetime.date.today().strftime("%A,")
Current_Date = datetime.date.today().strftime("%d")
Current_Month = datetime.date.today().strftime("%B")
Combined_Date = ("It is a " + Current_Day + " It is the " + Current_Date + " of " + Current_Month)
Combined_Date = str(Combined_Date)
self.DateInfoOutput.setText(Combined_Date)
cursor = self.editor.textCursor()
crsr.execute('SELECT Date FROM Calendar2 WHERE Number = ?', (Count,))
Dates3 = crsr.fetchone()
Dates3 = str(Dates3)
Dates3 = Dates3.replace("'", "")
Dates3 = Dates3.replace('(', '')
Dates3 = Dates3.replace(')', '')
Dates3 = Dates3.replace(',', '')
crsr.execute('SELECT Text FROM Calendar2 WHERE Number = ?', (Count,))
Text = crsr.fetchone()
Text = str(Text)
Text = Text.replace("'", "")
Text = Text.replace('(', '')
Text = Text.replace(')', '')
Text = Text.replace(',', '')
print(Dates3)
Dates3 = Dates3.replace('/', ' ')
Dates3 = Dates3.replace("'", '')
Dates3.split()
sqlDay = int(Dates3[0:2])
sqlMonth = int(Dates3[3:4])
sqlYear = int(Dates3[6:10])
self.dates = { QDate(sqlYear, sqlMonth, sqlDay): ["Hi"]}
format = QTextCharFormat()
format.setBackground(QColor("lightblue"))
Count = Count + 1
for date, value in self.dates.items():
self.calendarWidget.setDateTextFormat(date, format)
self.DateInfoOutput.setText(Text)
else:
self.DateInfoOutput.setText(Combined_Date)
else:
self.DateInfoOutput.setText(Combined_Date)