Mac App Store에서 Todo, PYQT5 ModelView Architecture를 사용하여 간단한 TODO 앱을 구축하십시오
ModelView Architecture QT S MVC 유사 인터페이스를보기에 데이터를 표시합니다
실행중인 앱은 다음과 같습니다.
Todo 4+
몇 년 동안 나는이 응용 프로그램을 iPad, iPhone 및 MacBookPro에서 사용했습니다. iOS에서 완벽하게 작동한다면 MacOS의 진화를 완전히 따르지 않은 것 같습니다.
설치에 문제가 없습니다. 그러나 더 이상 MacOS에서 Toodledo와 동기화 할 수는 없지만 iOS에서는 계속 가능합니다. 동일한 식별자가 인식되지 않습니다.
그러므로 그것은 나에게 불필요 해지고 … Appigo의 도움은 내 요청에 대한 답을 제공하기 위해 서두르지 않는 것 같습니다. 고객의 개념이 매일 그 가치를 조금 더 잃는다는 점에 주목하는 것은 항상 불쾌합니다.
피사 d
이 업데이트 이후로 나는 12 명으로 모든 목록을 잃어 버렸고 매일 전문적인 방식으로 일합니다. 나는 약 200 개의 지점을 영구적으로 관리합니다.이 업데이트는 몇 달 동안 시련을 일으켰습니다 ! 목록에서 구성된 모든 작업은 단일 글로벌 목록으로 그룹화 된 것으로 나타났습니다. 이 버그 가이 소프트웨어의 전문가라고 말하는 버전으로 전달하는 것은 확실히 그렇지 않으면 우수합니다. 나는 결코 포로가되지 않을 것이다. 오늘 저녁 이메일로 연락 한 지원의 응답을 기다리 거나이 웅장한 소프트웨어의 이전 버전을 찾는 것은 여전히 남아 있습니다. 나는 그것이 새로운 버전의 젊음이되기를 바랍니다. 이전 버전으로 이미 획득 한 기능을 찾기 위해 유료 프로 버전으로 마이그레이션하는 전략이 아닙니다. 정보를 위해 내 동기화는 Dropbox로 수행됩니다
Surlepoint, 2011 년 12 월 13 일
싱크로는 이제 니켈입니다
나는 느린 동기화 전에 잡았고, 나쁘게 걸어 갔다. 그러나 이제 iCloud와 함께, 그것은 나에게 완벽하게 어울립니다.
가능한 일부 개선 사항 : 더 많은 디스플레이 설정.
– 사용자가 사용하는 것만 표시합니다. 예를 들어, 나는 컨텍스트 나 레이블을 사용하지 않으며 (아직 아님) 더 이상 내 할 일을 “오염”하는 이러한 옵션을 더 이상 표시하지 않으려 고합니다. 일상 메모에 “날짜 / 우선 순위 / 목록 / 유형”만 갖고 거의 사용하지 않는 옵션을 마우스 오른쪽 버튼으로 클릭하고 싶습니다
– 반대로 Drop -Down 메뉴보다 간단한 PLSU 디스플레이를 원합니다. 날짜, 우선 순위, 목록, … 목록 3 개만 있으면 3 개의 버튼이 표시되기에 충분하고 내 목록을 선택할 수 있습니다. 드롭 다운 메뉴를 클릭하는 대신 한 번의 클릭으로 이름을 찾아서 클릭하십시오. (우선 순위를 위해, 특히 우리는 Todo 목록의 매우 시각적 인 그리기에서 그다지 자연스럽지 않은 옵션에서 이름 선택으로 이동합니다.
이것들은 인체 공학적 세부 사항입니다. 나는 TODO의 단순성과 효율성을 좋아하므로 훨씬 더 간단하게 구성 할 수 있기를 원합니다.
개인 정보 보호 앱
개발자 인 Appigo는 개인 관행 및 Apple에 대한 데이터 처리에 대한 세부 정보를 제공하지 않았습니다. 자세한 내용은 개발의 개인 정보 보호 정책을 참조하십시오.
ModelView 아키텍처
보기에 데이터를 표시하기위한 QT의 MVC 유사 인터페이스
PYQT5를 사용하여보다 복잡한 응용 프로그램을 구축하기 시작하면 데이터와 동기화 된 위젯을 보관할 수 있습니다. 위젯에 저장된 데이터 (e.g. 간단한 qlistwidget)은 파이썬에서 조작 할 수있는 쉽게 사용할 수 없습니다 – 변경 사항은 항목을 가져와 데이터를 가져 와서 다시 설정해야합니다. 이에 대한 기본 솔루션은 외부 데이터 표현을 Python으로 유지 한 다음 데이터와 위젯 모두에 대한 업데이트를 중복하거나 데이터에서 Wihole 위젯을 다시 작성하는 것입니다. 이것은 빠르게 못 생겼을 수 있으며 데이터를 충전하기 위해 많은 보일러 플레이트가 생길 수 있습니다.
고맙게도 QT는이 모델 뷰에 대한 솔루션을 가지고 있습니다. ModelViews는 단순한 데이터 구조에서 외부 데이터베이스에 이르기까지 데이터 소스와 상호 작용하는 일반 모델 인터페이스를 사용하는 표준 디스플레이 위젯에 대한 강력한 대안입니다. 이것은 데이터를 분리하여 원하는 구조로 유지할 수있게하는 동안,보기는 프레젠테이션 및 업데이트를 처리합니다.
이 튜토리얼은 QT ModelView Architecture의 주요 측면을 소개하고이를 사용하여 PYQT5에서 간단한 데스크탑 TODO 응용 프로그램을 구축합니다.
모델보기 컨트롤러
모델 – 컨트롤러 참조 (MVC)는 응용 프로그램을 3 개의 상호 연결된 부품으로 나누는 개발 사용자 인터페이스를위한 아키텍처 패턴 사용입니다. 이것은 데이터의 내부 표현을 사용자에게 제공하고 수락하는 방법과 분리합니다.
MVC Design Pattenn은 세 가지 주요 구성 요소 –
- 모델 앱이 작업하는 데이터 구조를 보유합니다.
- 보다 그래픽 또는 테이블이있는 사용자에게 표시된 정보의 표현입니다. 동일한 데이터 모델의 여러 뷰가 허용됩니다.
- 제어 사용자로부터 입력을 허용하여 모델 또는보기를 위해 명령으로 변환합니다.
그것은 qt land view와 컨트롤러의 구별이 약간 어두워집니다. QT는 사용자 (OS를 통해)의 입력 이벤트를 수락하고이를 위젯 (컨트롤러)에 위임하여 처리합니다. 그러나 위젯은 또한 사용자에게 현재 상태의 프레젠테이션을 처리하여 시야에 정사각형을줍니다. QT-S-SPEAK에서 라인을 그릴 위치를 고수화하는 대신 뷰와 컨트롤러가 결합됩니다.
중요하게도, 데이터 그리고 그것이 어떻게 제시되는지 보존됩니다.
모델보기
모델은 데이터 저장소와 ViewController의 인터페이스 역할을합니다. 이 모델은 데이터를 보유하고 (또는 그에 대한 참조) 표준화 된 API를 통해이 데이터를 제공하는 다음 뷰를 통해 사용자에게 소비하고 제시합니다. 여러보기가 동일한 데이터를 공유하여 완전히 다른 방식으로 제시 할 수 있습니다.
예를 들어 표준 파이썬 목록 또는 사전 또는 데이터베이스 (E를 통해)와 같은 모델에 “데이터 스토어”를 사용할 수 있습니다.g. sqlalchemy) – 그것은 당신에게만 달려 있습니다.
두 부분은 본질적으로 책임이 있습니다
- 차 모델 데이터를 저장하거나 그에 대한 참조를 저장하고 개인 또는 레코드 범위, 관련 메타 데이터 또는 표시하다 지침.
- 차 보다 모델에서 데이터를 요청하고 위젯에 반환 된 내용을 표시합니다.
문서에서 QT 아키텍처에 대한 심도있는 토론이 있습니다.
Pyinstaller를 사용한 Python GUI 애플리케이션 포장에 대한 완전한 안내서.
[[할인.할인 _pc]]] 다음 [할인.기간]] [할인.설명]] 코드 [할인.쿠폰 코드]]
구매력 평가
[[Country]]의 개발자는 [[할인.Code와 함께 모든 책 및 코스에서 꺼짐 Discount_pc]]].쿠폰 코드]]
간단한 모델보기 -Todo 목록
실제로 ModelViews를 사용하는 방법을 보여주기 위해 Desktop Todo 목록의 매우 간단한 구현을 구성합니다. 이는 항목 목록에 대한 QlistView, 새 항목을 입력 할 QlineEdit 및 완료 된대로 항목을 추가, 삭제 또는 표시 할 버튼 세트로 구성됩니다.
UI
간단한 UI는 추악한 외출 QT 제작자였으며 MainWindow로 저장되었습니다.UI . 차 .UI 파일 및 기타 모든 부분은 아래에서 다운로드 할 수 있습니다.
QT Creator에서 간단한 TODO 앱 설계
실행중인 앱은 다음과 같습니다.
달리기 Todo Gui (아직 아무것도 작동하지 않음)
아래 표에 표시된 ID를 제공 한 인터페이스에서 사용 가능한 위젯.
objeuch | 친절한 | 설명 |
---|---|---|
Todview | qlistview | 현재 토 도스 목록 |
토 도트 | QlineEdit | 새로운 TODO 항목을 생성하기위한 텍스트 입력 |
AddButton | QPUSHBUTTON | ToDOS 목록에 추가하여 새로운 TODO를 만듭니다 |
deletebutton | QPUSHBUTTON | 현재 선택한 TODO를 삭제하여 ToDOS 목록에서 제거 |
완전한 부턴 | QPUSHBUTTON | 선택한대로 현재 선택된 할 일을 표시하십시오 |
이 식별자를 사용하여 나중에 응용 프로그램 논리를 연결하겠습니다.
모델
우리는 구현에서 서브 클래스를 통해 사용자 정의 모델을 정의하여 모델에 고유 한 부분에 집중할 수 있습니다. QT는 목록, 트리 및 테이블을 포함하여 여러 가지 모델베이스를 제공합니다 (스프레드 시트에 이상적).
이 예에서는 결과를 qlistview에 표시합니다 . 이것의 일치하는 기본 모델은 QabstractListModel입니다 . 모델의 개요 정의는 다음과 같습니다.
클래스 토 도델 (qtcore.qabstractListModel) : def __init __ (self, *args, todos = none, ** kwargs) : Super (To Domodel, self).__init __ (*args, ** kwargs) 자기.todos = todos 또는 [] def data (자기, 색인, 역할) : if lole == qt.DisplayRole : # 데이터 구조는 아래를 참조하십시오. 상태, 텍스트 = 자기.TODOS [색인.row ()] # todo 텍스트 만 반환. 반환 텍스트 DEF ROWCOUNT (Self, Index) : return len (Self.토 도스)
차 .Todos 변수는 데이터 저장소이며 두 가지 방법 RowCount ()와 Data ()는 표준 모델 방법입니다. 우리는 아래에서 이것을 살펴볼 것입니다.
.TODOS 목록
우리 모델의 데이터 저장소는 다음과 같습니다 .TODOS, 간단한 파이썬 목록 인 우리는 값의 튜플을 형식 [(bool, str), (bool, str), (bool, str)에 저장합니다 그러므로 주어진 항목의 상태, 그리고 str는 Todo의 텍스트입니다.
우리는 자기를 초기화합니다.Todos 키워드 인수를 통해 목록이 전달되지 않는 한 시작시 빈 목록으로 Todo.
본인.Todos = todos 또는 []는 자기를 설정합니다.제공된 경우 제공되는 Todos 값에 대한 Todos 트 루티 (나.이자형. 빈 목록 이외의 다른 것, 부울 거짓 또는 기본값이 없음), 그렇지 않으면 빈 목록으로 설정됩니다 [] .
이 모델의 삽입을 만들려면 간단 할 수 있습니다
model = todomodel () # 빈 TODO 목록 생성
또는 기존 목록을 전달하려면 –
todos = [(false, 'airt'), (false, '다른 항목')] model = toomodel (todos)
.RowCount ()
차 .rowCount () 메소드는 현재 데이터의 행 수를 얻기 위해보기에 따라 콜마 드입니다. 이것은 이제 데이터 저장소를 다시 실행할 수있는 최대 인덱스를보기 위해 필요합니다 (Row Count-1). 판매 우리는 파이썬 목록을 데이터 저장소로 사용하는데, 이것의 반환 값은 단순히 목록의 len ()입니다.
.데이터 ()
이것은 모델의 핵심이며,보기에서 데이터 요청을 처리하고 적절한 결과를 반환합니다. 두 개의 매개 변수 인덱스와 역할을 수신합니다.
인덱스는 뷰가 요청하는 데이터의 위치/좌표입니다. 두 가지 방법으로 액세스 할 수 있습니다 .행 () 및 .각 차원의 위치를 제공하는 열 ().
QListView의 경우 열은 항상 0이므로 무시할 수 있지만 스프레드 시트보기에서 2D 데이터에 사용해야합니다.
역할은 다음을 나타내는 깃발입니다 친절한 뷰가 요청하는 데이터의. 이거 때문입니다 .Data () 메소드는 실제로 핵심 데이터보다 더 많은 책임이 있습니다. 또한 스타일 정보, 툴팁, 상태 표시 줄 등에 대한 요청을 처리합니다. – 기본적으로 데이터 자체가 알 수있는 모든 것.
QT의 이름 지정.DisplayRole은 약간 이상하지만 이것은 보다 “디스플레이를위한 데이터를 알려주세요”라고 묻습니다. 다른 것이 있습니다 역할 스타일링 요청 또는 “편집 준비”형식의 데이터 요청에 대한 데이터가 수신 할 수있는 데이터.
역할 | 값 | 설명 |
---|---|---|
QT.표시하다 | 0 | 텍스트 형태로 렌더링되는 주요 데이터. (Qstring) |
QT.장식 분야 | 1 | 아이콘 형태의 장식으로 렌더링되는 데이터. (QCOLOR, QICON 또는 QPIXMAP) |
QT.사설 | 2 | 공식적인 데이터는 편집자에서 편집을 위해. (Qstring) |
QT.도구립 | 삼 | 항목의 툴팁에 표시된 데이터. (Qstring) |
QT.법령관 | 4 | 상태 표시 줄에 표시된 데이터. (Qstring) |
QT.이 롤리 뭐야 | 5 | “이게 뭐야?” 패션. (Qstring) |
QT.Size -Hintrole | 13 | 보기에 제공 될 항목에 대한 크기 힌트. (qsize) |
사용 가능한 전체 목록 역할 QT Itmdatarole 문서를 참조하십시오. 우리의 TODO 목록은 QT 만 사용하는 것입니다.DisplayRole 및 Qt.장식 분야 .
기본 구현
아래는 UI를로드하고 표시하는 데 필요한 기본 스텁 응용 프로그램입니다. 이 기반에 모델 코드와 응용 프로그램 논리를 추가하겠습니다.
PYQT5에서 SYS 가져 오기 QTCORE, QTGUI, QTWIDGETS, UIC PYQT5.qtcore import qt_creator_file = "mainwindow.ui "ui_mainwindow, qtbaseclass = uic.loaduduype (qt_creator_file) 클래스 to 도도 (qtcore.qabstractListModel) : def __init __ (self, *args, todos = none, ** kwargs) : Super (To Domodel, self).__init __ (*args, ** kwargs) 자기.todos = todos 또는 [] def data (자기, 색인, 역할) : if lole == qt.DisplayRole : 상태, 텍스트 = 자기.TODOS [색인.row ()] 반환 텍스트 def rowCount (self, index) : return len (self).Todos) 클래스 Mainwindow (qtwidgets.qmainwindow, ui_mainwindow) : def __init __ (self) : qtwidgets.Qumainwindow.__init __ (self) ui_mainwindow.__ __ (자기) 자아.setupui (자기) 자기.model = todomodel () self.Todview.setModel (자기.모델) app = qtwidgets.qapplication (sys.argv) 창 = mainWindow () 창.show () 앱.exec_ ()
우리는 이전과 같이 Toomodel을 정의하고 MainWindow 객체를 초기화합니다. MainWindow의 __init__에서 우리는 TODO 모델의 인스턴스를 생성 하고이 모델을 todo_view에 설정합니다 . 이 파일을 TODO로 저장하십시오.py와 함께 실행 –
python3 todo.속도
아직 볼 것이 많지 않지만 QListView와 모델이 실제로 작동합니다. 기본 데이터를 추가하면 목록에 나타납니다.
본인.model = todomodel (todos = [(false, 'my first todo'))))))))
qlistview 하드 코딩 된 TODO 항목을 보여줍니다
이와 같이 수동으로 항목을 계속 추가 할 수 있으며 qlistview에 순서대로 나타납니다 . 다음으로 응용 프로그램 내에서 ITM을 추가 할 수 있습니다.
먼저 add라는 메인 전화에서 새 메소드를 만듭니다 . 이것은 입력의 현재 텍스트를 새로운할만한 것으로 추가하는 콜백입니다. 이 메소드를 AddButton에 연결하십시오.__init__ 블록의 끝에서 누름을 누릅니다.
클래스 Mainwindow (Qtwidgets.qmainwindow, ui_mainwindow) : def __init __ (self) : qtwidgets.Qumainwindow.__init __ (self) ui_mainwindow.__ __ (자기) 자아.setupui (자기) 자기.model = todomodel () self.Todview.setModel (자기.모델) # 버튼을 연결합니다. 본인.AddButton.누르다.연결 (자기.add) def add (self) : "" "QlineEdit에서 텍스트를 얻는 TODO 목록에 항목 추가 .할만한 사람과 그것을 청산합니다. "" "텍스트 = 자기.토 도트.텍스트 () 텍스트 인 경우 : # 빈 줄을 추가하지 마십시오. # 모델을 통해 목록에 액세스하십시오. 본인.모델.토 도스.append ((false, text)) # 트리거 새로 고침. 본인.모델.layoutchanged.emit () # 입력 자체를 비우십시오.토 도트.setText ( "")
추가 블록에서 라인 자체를 주목하십시오.모델.layoutchanged.emit () . 여기서 우리는 모델 신호를 방출합니다 .Layoutchanged는 그 사실을 알리기 위해 모양 데이터의 변경이 변경되었습니다. 이것은보기의 엔티티의 새로 고침을 유발합니다. 이 줄을 생략하면 TODO가 여전히 추가되지만 QListView는 업데이트되지 않습니다.
데이터 만 변경되지만 행/열의 수가 영향을받지 않으면 .대신 datachanged () 신호. 이것은 또한 전체보기를 다시 그리기를 피하기 위해 왼쪽 상단 및 오른쪽 최하위 임대를 사용하여 데이터의 변경된 영역을 정의합니다.
다른 행동을 연결합니다
이제 버튼의 나머지 신호를 연결하고 성능을 위해 도움말을 추가 할 수 있습니다 삭제 그리고 완벽한 운영. 우리는 버튼 신호를 이전과 같이 __init__ 블록에 추가합니다.
본인.AddButton.누르다.연결 (자기.추가) 자기.deletebutton.누르다.연결 (자기.삭제) 자기.완전한 부턴.누르다.연결 (자기.완벽한)
그런 다음 새 삭제 방법을 다음과 같이 정의하십시오
def delete (self) : indexes = self.Todview.selectedDindexes () 인덱스 인 경우 : # indexes는 단일 선택의 단일 항목 목록입니다. index = indexes [0] # 항목 제거 및 새로 고침. 델 셀프.모델.TODOS [색인.Row ()] 자기.모델.layoutchanged.emit () # 선택을 지우십시오 (오래 유효하지 않으므로). 본인.Todview.clarselection ()
우리는 자기를 사용합니다.Todview.선택한 dindexes (단일 선택 모드에서 우리와 같이 실제로 단일 항목 목록)를 얻기 위해 선택한 다음 .Row ()는 모델의 Todos 목록에 대한 색인으로. Python의 DEL 연산자를 사용하여 인덱스 된 항목을 삭제 한 다음 데이터의 모양이 수정되었으므로 LayoutChanged 신호를 트리거합니다.
Finallly, 우리는 5 월과 관련된 항목이 이제 한계를 벗어 났기 때문에 활성 선택을 지우고 있습니다 (마지막 항목을 선택한 경우).
이 똑똑하게 만들고 대신 목록의 마지막 항목을 선택할 수 있습니다
완전한 방법은 다음과 같은 것을 좋아합니다
def complete (self) : indexes = self.Todview.selectredIndexes () 인덱스 if index : index = indexes [0] row = index.row () 상태, 텍스트 = 자기.모델.토 도스 [행] 자아.모델.todos [row] = (true, text) # .Datachanged는 왼쪽 상단과 하단 오른쪽을 가져옵니다. 단일 선택의 경우 #입니다. 본인.모델.datachanged.Emit (index, index) # 선택을 지우십시오 (오래 유효하지 않기 때문에). 본인.Todview.clarselection ()
삭제와 동일한 인덱싱을 사용하지만 이번에는 모델에서 항목을 가져옵니다 .Todos 목록을 작성한 다음 상태를 True로 바꿉니다 .
우리는 수정할 수없는 파이썬 튜플로 저장 되므로이 페치 및 교체를 수행해야합니다.
여기서 핵심은 여기에서 다릅니다. 표준 QT 위젯은 데이터를 직접 변경하고 QT에 변경 사항을 간단히 알려야한다는 것입니다.
QT 사용.장식 분야
지금 응용 프로그램을 실행하면 두 작업을 추가하고 삭제하는 것이 효과가 있지만 항목을 완료하는 동안보기에 표시가 없습니다. 아이템이 완료되었을 때 표시 할 표시기가있는보기를 제공하려면 모델을 업데이트해야합니다. 업데이트 된 모델은 다음과 같습니다.
진드기 = qtgui.qimage ( '진드기.png ') 클래스 toomodel (qtcore.qabstractListModel) : def __init __ (self, *args, todos = none, ** kwargs) : Super (To Domodel, self).__init __ (*args, ** kwargs) 자기.todos = todos 또는 [] def data (자기, 색인, 역할) : if lole == qt.DisplayRole : _, text = self.TODOS [색인.row ()] 역할 == QT 인 경우 텍스트를 반환합니다.장식 분야 : 상태, _ = 자기.TODOS [색인.Row ()] IF 상태 : RETURN TICK DEF ROWCOUNT (SELF, Index) : return Len (Self.토 도스)
진드기 아이콘 진드기를 사용하고있었습니다.PNG는 완전한 항목을 나타 내기 위해 Tick이라는 Qimage 객체에로드합니다 . 모델에서 우리는 QT의 핸들러를 구현했습니다.DecororationRole은 상태가 사실입니다.
내가 사용하고있는 아이콘은 p에 의해 설정된 푸가에서 가져온 것입니다.Yusukekamiyamane
ICON의 Intostad는 색상으로 돌아갈 수 있습니다.g. QTGUI.QCOLOR ( ‘Green’)는 단단한 사각형으로 그릴 것입니다.
앱 실행 이제 항목을 완전하게 표시 할 수 있어야합니다.
TODOS가 완료되었습니다
지속적인 데이터 저장소
우리의 Todo 앱은 잘 작동하지만 치명적인 결함이 하나 있습니다. 응용 프로그램을 닫으 자마자 당신이 할 때 할 일이 없다고 생각하면서 Zen의 단기적인 감정에 기여할 수 있다고 생각하면서, 아마도 장기적 일 것입니다. 나쁜 생각.
솔루션은 지속 데이터 저장소의 일부 외출을 구현하는 것입니다. 가장 간단한 접근 방식은 간단한 파일 저장소로, 시작시 JSON 또는 PICKLE 파일에서 항목을로드하고 변경시 다시 작성합니다.
이를 위해 우리는 두 가지 새로운 방법을 정의합니다 . JSON 파일 이름 데이터의 이러한로드 데이터.JSON (존재하는 경우, 그렇지 않은 경우 오류를 무시하는 경우).모델.Todos와 현재 자아를 씁니다.모델.Todos는 각각 동일한 파일로 나옵니다.
def load (self) : try : Open ( 'data.JSON ','R ') AS F : SELF.모델.todos = json.로드 (f) 예외 예외 : Pass Def Save (self) : Open ( 'data.JSON ','W ') AS F : DATA = JSON.덤프 (자기.모델.Todos, f)
데이터의 변경 사항을 지속하려면 추가해야합니다 .() 핸들러는 데이터를 수정하는 메소드의 끝에 저장합니다 .모델이 생성 된 후 __init__ 블록에 () handler.
최종 코드는 다음과 같습니다
PYQT5 가져 오기 QTCore, QTGUI, QTWIDGETS, UIC PYQT5에서 JSON 가져 오기 SYS 가져 오기.qtcore import qt_creator_file = "mainwindow.ui "ui_mainwindow, qtbaseclass = uic.loaduduseype (qt_creator_file) tick = qtgui.qimage ( '진드기.png ') 클래스 toomodel (qtcore.qabstractListModel) : def __init __ (self, *args, todos = none, ** kwargs) : Super (To Domodel, self).__init __ (*args, ** kwargs) 자기.todos = todos 또는 [] def data (자기, 색인, 역할) : if lole == qt.DisplayRole : _, text = self.TODOS [색인.row ()] 역할 == QT 인 경우 텍스트를 반환합니다.장식 분야 : 상태, _ = 자기.TODOS [색인.Row ()] IF 상태 : RETURN TICK DEF ROWCOUNT (SELF, Index) : return Len (Self.Todos) 클래스 Mainwindow (qtwidgets.qmainwindow, ui_mainwindow) : def __init __ (self) : Super (Mainwindow, self).__init __ () 자아.setupui (자기) 자기.model = todomodel () self.로드 () 자체.Todview.setModel (자기.모델) 자기.AddButton.누르다.연결 (자기.추가) 자기.deletebutton.누르다.연결 (자기.삭제) 자기.완전한 부턴.누르다.연결 (자기.완료) def add (self) : "" "QlineEdit에서 텍스트를 얻는 Todo 목록에 항목 추가 .할만한 사람과 그것을 청산합니다. "" "텍스트 = 자기.토 도트.텍스트 () 텍스트 인 경우 : # 빈 줄을 추가하지 마십시오. # 모델을 통해 목록에 액세스하십시오. 본인.모델.토 도스.append ((false, text)) # 트리거 새로 고침. 본인.모델.layoutchanged.emit () # 입력 자체를 비우십시오.토 도트.setText ( "") 자체.저장 () def delete (self) : indexes = self.Todview.selectedDindexes () 인덱스 인 경우 : # indexes는 단일 선택의 단일 항목 목록입니다. index = indexes [0] # 항목 제거 및 새로 고침. 델 셀프.모델.TODOS [색인.Row ()] 자기.모델.layoutchanged.emit () # 선택을 지우십시오 (오래 유효하지 않으므로). 본인.Todview.clarelection () 자체.저장 () def womplet (self) : indexes = self.Todview.selectredIndexes () 인덱스 if index : index = indexes [0] row = index.row () 상태, 텍스트 = 자기.모델.토 도스 [행] 자아.모델.todos [row] = (true, text) # .Datachanged는 왼쪽 상단과 하단 오른쪽을 가져옵니다. 단일 선택의 경우 #입니다. 본인.모델.datachanged.Emit (index, index) # 선택을 지우십시오 (오래 유효하지 않기 때문에). 본인.Todview.clarelection () 자체.저장 () def load (self) : try : with open ( 'data.db ','r ') as f : self.모델.todos = json.로드 (f) 예외 예외 : Pass Def Save (self) : Open ( 'data.db ','w ') as f : data = json.덤프 (자기.모델.Todos, f) app = qtwidgets.qapplication (sys.argv) 창 = mainWindow () 창.show () 앱.exec_ ()
애플리케이션의 데이터가 크거나 더 복잡해질 가능성이있는 경우 실제 데이터베이스를 사용하여 저장할 수 있습니다. 이 경우 모델은 인터페이스를 데이터베이스로 랩핑하고 데이터가 표시하도록 직접 쿼리합니다. 다가오는 튜토리얼 에서이 작업을 수행하는 방법.
qlistview의 또 다른 흥미로운 예는이 예제 미디어 플레이어 응용 프로그램을 참조하십시오. QT Building QMediaPlayList를 데이터 저장소로 사용하고 QLISTVIEW에 내용이 표시됩니다 .
BCR 정보.CX :
BCR.CX는 브라질 기술 스타트 업으로, 비즈니스 아웃소싱 프로세스 (BPO)와 비즈니스 환경 아웃소싱 (BEO) 모두에 특화되어 있으며, 주로 수요 생성, 고객 경험, 커뮤니케이션, 사용자 지원 및 만족도에 중점을 둡니다.
설명:
TODO 앱은 근무일 동안 에이전트의 메모를 저장하는 빠르고 안전하며 사용자 친화적 인 방법으로 개발되었습니다.
각 개별 티켓 또는 고객을 기반으로 자신의 작업을 작성하고 관리 할 수 있습니다.
트레일을 만들고 워크 플로우를 사용자 정의하십시오
생산성 향상! TODO 앱을 사용하여 반복 프로세스를 표준화하기 위해 사용자 정의 워크 플로를 만들 수 있습니다. Todos and Dones로 지금 시도하고 진행 상황을 통제하십시오.
자원:
- 각 티켓에 대한 작업을 만듭니다
- 후속 조치 전송 바로 전달할 수 있습니다
- 생산성을 향상시키기 위해 표준화 된 워크 플로를 만듭니다.
- 일상 생활을 유지하기 위해 작업 목록을 관리하십시오.
- Todo와 Zendesk Sunshine을 모두 쌓아 앱 기능에 대한 전체 액세스 권한을 얻습니다
- 작업 자동화를 만들거나 편집하여 생산성을 향상시키고 개인화 된 사전 설정을 저장하십시오.