我正试图通过按钮单击上的多个qml文本字段将事件添加到我的google日历api中。首先,我肯定会对我的方法提出建设性的批评
我不是100%确定我当前的错误在哪里,但我遇到了两个错误,我认为这是我问题的根源,我感谢任何建议
我认为我在尝试“重用”AddToCalendar类中的self.service时导致了一个错误。这是我从另一个类中提取实例变量的时候。
我的错误是这样的(我的第二个错误替换了这个错误):Error:'NoneType' object has no attribute 'events'
在我的Cal2.qml中的cal2.createevent(eventinfo.text, eventstart.text, eventend.text)
我的第二个也是最新的错误(在同一行)是在从多个文本字段单击按钮时向createevent发送信息 TypeError: createevent() missing 2 required positional arguments: 'eventstart' and 'eventend'
我已经包含了一些相关的代码片段,如果有更多的帮助,请告诉我
Cal2.py
class CalendarBackend(QtCore.QObject):
eventsChanged = QtCore.Signal(list)
def __init__(self, parent=None):
super().__init__(parent)
self._service = None
@property
def service(self):
return self._service
class AddToCalendar(QtCore.QObject):
def __init__(self, parent=None):
super().__init__(parent)
self._data = dict()
self.A = CalendarBackend()
@QtCore.Slot(str)
def createevent(self, eventinfo: str, eventstart: str, eventend: str):
starttime = str(datetime.datetime.strptime(eventstart, "%m/%d/%Y %H:%M:%S"))
endtime = str(datetime.datetime.strptime(eventend, "%m/%d/%Y %H:%M:%S"))
try:
event = {
'summary': eventinfo,
'start': {
'dateTime': (starttime[0:10]+"T"+starttime[11:]+"-06:00"),
'timeZone': 'America/Chicago',
},
'end': {
'dateTime': (endtime[0:10]+"T"+endtime[11:]+"-06:00"),
'timeZone': 'America/Chicago',
}
}
except:
pass
event = self.A._service.events().insert(calendarId='primary', body=event).execute()
print('Event created: %s' % (event.get('htmlLink')))
if __name__ == "__main__":
app = QtGui.QGuiApplication(sys.argv)
QtQml.qmlRegisterType(CalendarProvider, "MyCalendar", 1, 0, "CalendarProvider")
cal2 = AddToCalendar()
engine = QtQml.QQmlApplicationEngine()
engine.rootContext().setContextProperty("cal2", cal2)
filename = os.path.join(CURRENT_DIR, "Calendar2.qml")
engine.load(QtCore.QUrl.fromLocalFile(filename))
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec_())
Cal2.qml
TextField {
id: eventstart
placeholderText: qsTr("Start Time 01/12/2020 14:35:00")
selectByMouse: true
}
TextField {
id: eventend
placeholderText: qsTr("End Time 01/12/2020 16:35:00")
selectByMouse: true
}
TextField {
id: eventinfo
placeholderText: qsTr("Event Name")
selectByMouse: true
}
Butt {
id: buttonn
width: rect.width
height: rect.height
Rectangle {
id: rect
implicitWidth: rect.width
implicitHeight: 25
}
Text {
text: "Add Event"
}
onTouched: {
console.log("touched")
cal2.createevent(eventinfo.text, eventstart.text, eventend.text)
}
错误的原因很简单:
您似乎复制并粘贴了我以前的解决方案,但不了解它是如何工作的
在my previous solution服务中是google日历实例,CalendarBackend是一个QObject,它允许在不阻塞Qt eventloop的情况下使用服务(这就是为什么使用线程),CalendarProvider只向QML公开一些方法
相关问题 更多 >
编程相关推荐