【发布时间】:2019-05-22 09:21:49
【问题描述】:
根据要求,我需要创建一个用于任务管理的桌面应用程序。要求是以类似于 Outlook 日历的日历格式显示所有计划的活动。该应用程序还将有一些其他按钮,用于根据日历上的计划活动将用户重定向到相应的 URL。
我正在使用 python 的 PyQt5 模块开发这个桌面应用程序。我已经创建了所需的按钮,对于任务管理,我已经使用 QCalendarWidget 创建了日历。我还能够访问各个单元格,并能够根据日历上使用的点击来打印日期。
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMenuBar, QAction, QDialog, QGroupBox, QHBoxLayout, QVBoxLayout, QGridLayout, QLabel, QCalendarWidget, QMainWindow
import sys
from PyQt5 import QtGui, QtCore
from PyQt5.QtCore import QRect, QDate
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt, QSize
class Window(QDialog):
def __init__(self):
super().__init__()
win = QWidget()
self.title = "Calendar Application"
self.top = 100
self.left = 100
self.width = 400
self.height = 400
self.InitWindow()
def InitWindow(self):
#self.setWindowIcon(QtGui.QIcon("heading.png"))
self.setWindowTitle(self.title)
self.setGeometry(self.top, self.left, self.width, self.height)
self.createMenu()
self.createHeader()
self.createHomeLayout()
self.show()
def createHeader(self):
gboxLayout = QGridLayout()
self.label = QLabel("Calendar Application")
gboxLayout.addWidget(self.label, 1, 1)
self.header_groupBox = QGroupBox()
self.header_groupBox.setLayout(gboxLayout)
def createMenu(self):
mainMenu = QMenuBar()
fileMenu = mainMenu.addMenu("File")
helpMenu = mainMenu.addMenu("Help")
exitAction = QAction('Exit', self)
helpAction = QAction('About Us', self)
fileMenu.addAction(exitAction)
helpMenu.addAction(helpAction)
def createHomeLayout(self):
### --------------------------- ACTIVITY Widget --------------------------------- ###
hbox = QHBoxLayout()
self.activity_groupBox = QGroupBox("Activities")
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.activity_groupBox.setFont(font)
self.gridLayout = QGridLayout()
self.button1 = QPushButton("Activity-1", self)
self.button1.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button1.setFont(font)
self.gridLayout.addWidget(self.button1, 0, 0)
self.button2 = QPushButton("Activity-2", self)
self.button2.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button2.setFont(font)
self.gridLayout.addWidget(self.button2, 0, 1)
self.button3 = QPushButton("Activity-3", self)
self.button3.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button3.setFont(font)
self.gridLayout.addWidget(self.button3, 0, 2)
self.button4 = QPushButton("Activity-4", self)
self.button4.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button4.setFont(font)
self.gridLayout.addWidget(self.button4, 1, 0)
self.button5 = QPushButton("Activity-5", self)
self.button5.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button5.setFont(font)
self.gridLayout.addWidget(self.button5, 1, 1)
self.button6 = QPushButton("Activity-6", self)
self.button6.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button6.setFont(font)
self.gridLayout.addWidget(self.button6, 1, 2)
self.button7 = QPushButton("Activity-7", self)
self.button7.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button7.setFont(font)
self.gridLayout.addWidget(self.button7, 2, 0)
self.button8 = QPushButton("Activity-8", self)
self.button8.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button8.setFont(font)
self.gridLayout.addWidget(self.button8, 2, 1)
self.button9 = QPushButton("Activity-9", self)
self.button9.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button9.setFont(font)
self.gridLayout.addWidget(self.button9, 2, 2)
self.button10 = QPushButton("Activity-10", self)
self.button10.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button10.setFont(font)
self.gridLayout.addWidget(self.button10, 3, 0)
self.button11 = QPushButton("Activity-11", self)
self.button11.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button11.setFont(font)
self.gridLayout.addWidget(self.button11, 3, 1)
self.button12 = QPushButton("Activity-12", self)
self.button12.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button12.setFont(font)
self.gridLayout.addWidget(self.button12, 3, 2)
self.button13 = QPushButton("Activity-13", self)
self.button13.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button13.setFont(font)
self.gridLayout.addWidget(self.button13, 4, 0)
self.button14 = QPushButton("Activity-14", self)
self.button14.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button14.setFont(font)
self.gridLayout.addWidget(self.button14, 4, 1)
self.button15 = QPushButton("Activity-15", self)
self.button15.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button15.setFont(font)
self.gridLayout.addWidget(self.button15, 4, 2)
self.button16 = QPushButton("Activity-16", self)
self.button16.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button16.setFont(font)
self.gridLayout.addWidget(self.button16, 5, 0)
self.button17 = QPushButton("Activity-17", self)
self.button17.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button17.setFont(font)
self.gridLayout.addWidget(self.button17, 5, 1)
self.button18 = QPushButton("Activity-18", self)
self.button18.setMinimumHeight(40)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.button18.setFont(font)
self.gridLayout.addWidget(self.button18, 5, 2)
self.activity_groupBox.setLayout(self.gridLayout)
#self.report_groupBox.setLayout(gridLayout)
### ------------------------ REPORTS Widget -------------------------------- ###
self.report_groupBox = QGroupBox("Reports")
font = QtGui.QFont()
font.setFamily("Verdana")
font.setBold(True)
self.report_groupBox.setFont(font)
vbox = QVBoxLayout(self)
cal = QCalendarWidget(self)
cal.setGridVisible(True)
cal.clicked[QDate].connect(self.showDate)
vbox.addWidget(cal)
self.lbl = QLabel(self)
date = cal.selectedDate()
self.lbl.setText(date.toString("yyyy-MM-dd"))
vbox.addWidget(self.lbl)
hbox.addWidget(self.activity_groupBox)
hbox.addWidget(self.report_groupBox)
self.setLayout(hbox)
def close(self):
self.close()
#def recruitWindow(self):
def showDate(self, date):
self.lbl.setText(date.toString("yyyy-MM-dd"))
if __name__ == '__main__':
App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())
现在的要求是访问日历的每个单元格,如果有任何活动计划,则将其突出显示,并在单元格中提及活动名称,类似于 Outlook 日历。所有活动名称和时间表将作为输入在 Excel 表中给出。我可以访问日历单元格,但不确定如何突出显示单元格并打印单元格中的计划活动。
这可能吗?我是在正确的轨道上还是应该考虑其他一些方法?
可以从此链接访问 QCalendar。
【问题讨论】:
-
不是每个人都知道outlook日历的样子,所以很难理解你想要什么,你可以放一张图片,更好地说明你想要得到什么。
-
@eyllanesc 感谢您的建议。我已经用图片链接更新了帖子。我需要突出显示有一些预定活动的日期单元格,并在这些日期单元格中打印这些活动。请提出建议。
-
你说的高亮是什么意思?,你提供的图片一点帮助都没有,你说的打印是什么意思?如果您需要帮助,您应该更加关注问题。
-
@eyllanesc 通过突出显示我的意思是用不同的颜色为单元格着色,类似于图像中突出显示当天的方式。我知道 PyQt5 中可用的油漆,但不确定是否可以根据条件为单元格着色。我还想在这些彩色单元格中写下任务名称。这可能吗?
标签: python python-3.x pyqt pyqt5