Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d7a46de

Browse files
committed
Sync
1 parent 85f1f72 commit d7a46de

File tree

6 files changed

+267
-0
lines changed

6 files changed

+267
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# -*- coding: utf-8 -*-
2+
3+
# Form implementation generated from reading ui file 'Form.ui'
4+
#
5+
# Created by: PyQt5 UI code generator 5.15.4
6+
#
7+
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
8+
# run again. Do not edit this file unless you know what you are doing.
9+
10+
11+
from PyQt5 import QtCore, QtGui, QtWidgets
12+
13+
14+
class Ui_MainWindow(object):
15+
def setupUi(self, MainWindow):
16+
MainWindow.setObjectName("MainWindow")
17+
MainWindow.resize(400, 500)
18+
self.centralwidget = QtWidgets.QWidget(MainWindow)
19+
self.centralwidget.setObjectName("centralwidget")
20+
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.centralwidget)
21+
self.verticalLayout_3.setObjectName("verticalLayout_3")
22+
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
23+
self.verticalLayout_2.setSpacing(20)
24+
self.verticalLayout_2.setObjectName("verticalLayout_2")
25+
self.todoView = QtWidgets.QListView(self.centralwidget)
26+
self.todoView.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
27+
self.todoView.setObjectName("todoView")
28+
self.verticalLayout_2.addWidget(self.todoView)
29+
self.horizontalLayout = QtWidgets.QHBoxLayout()
30+
self.horizontalLayout.setContentsMargins(40, -1, 40, -1)
31+
self.horizontalLayout.setObjectName("horizontalLayout")
32+
self.deleteButton = QtWidgets.QPushButton(self.centralwidget)
33+
self.deleteButton.setObjectName("deleteButton")
34+
self.horizontalLayout.addWidget(self.deleteButton)
35+
self.completeButton = QtWidgets.QPushButton(self.centralwidget)
36+
self.completeButton.setObjectName("completeButton")
37+
self.horizontalLayout.addWidget(self.completeButton)
38+
self.verticalLayout_2.addLayout(self.horizontalLayout)
39+
self.verticalLayout = QtWidgets.QVBoxLayout()
40+
self.verticalLayout.setObjectName("verticalLayout")
41+
self.todoEdit = QtWidgets.QLineEdit(self.centralwidget)
42+
self.todoEdit.setObjectName("todoEdit")
43+
self.verticalLayout.addWidget(self.todoEdit)
44+
self.addButton = QtWidgets.QPushButton(self.centralwidget)
45+
self.addButton.setObjectName("addButton")
46+
self.verticalLayout.addWidget(self.addButton)
47+
self.verticalLayout_2.addLayout(self.verticalLayout)
48+
self.verticalLayout_3.addLayout(self.verticalLayout_2)
49+
MainWindow.setCentralWidget(self.centralwidget)
50+
51+
self.retranslateUi(MainWindow)
52+
QtCore.QMetaObject.connectSlotsByName(MainWindow)
53+
54+
def retranslateUi(self, MainWindow):
55+
_translate = QtCore.QCoreApplication.translate
56+
MainWindow.setWindowTitle(_translate("MainWindow", "Todo"))
57+
self.deleteButton.setText(_translate("MainWindow", "Delete"))
58+
self.completeButton.setText(_translate("MainWindow", "Complete"))
59+
self.addButton.setText(_translate("MainWindow", "Add todo"))
60+
61+
62+
if __name__ == "__main__":
63+
import sys
64+
app = QtWidgets.QApplication(sys.argv)
65+
MainWindow = QtWidgets.QMainWindow()
66+
ui = Ui_MainWindow()
67+
ui.setupUi(MainWindow)
68+
MainWindow.show()
69+
sys.exit(app.exec_())
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>MainWindow</class>
4+
<widget class="QMainWindow" name="MainWindow">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>400</width>
10+
<height>500</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>Todo</string>
15+
</property>
16+
<widget class="QWidget" name="centralwidget">
17+
<layout class="QVBoxLayout" name="verticalLayout_3">
18+
<item>
19+
<layout class="QVBoxLayout" name="verticalLayout_2">
20+
<property name="spacing">
21+
<number>20</number>
22+
</property>
23+
<item>
24+
<widget class="QListView" name="todoView">
25+
<property name="selectionMode">
26+
<enum>QAbstractItemView::ExtendedSelection</enum>
27+
</property>
28+
</widget>
29+
</item>
30+
<item>
31+
<layout class="QHBoxLayout" name="horizontalLayout">
32+
<property name="leftMargin">
33+
<number>40</number>
34+
</property>
35+
<property name="rightMargin">
36+
<number>40</number>
37+
</property>
38+
<item>
39+
<widget class="QPushButton" name="deleteButton">
40+
<property name="text">
41+
<string>Delete</string>
42+
</property>
43+
</widget>
44+
</item>
45+
<item>
46+
<widget class="QPushButton" name="completeButton">
47+
<property name="text">
48+
<string>Complete</string>
49+
</property>
50+
</widget>
51+
</item>
52+
</layout>
53+
</item>
54+
<item>
55+
<layout class="QVBoxLayout" name="verticalLayout">
56+
<item>
57+
<widget class="QLineEdit" name="todoEdit"/>
58+
</item>
59+
<item>
60+
<widget class="QPushButton" name="addButton">
61+
<property name="text">
62+
<string>Add todo</string>
63+
</property>
64+
</widget>
65+
</item>
66+
</layout>
67+
</item>
68+
</layout>
69+
</item>
70+
</layout>
71+
</widget>
72+
</widget>
73+
<resources/>
74+
<connections/>
75+
</ui>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
import sys
2+
import json
3+
4+
from PyQt5.QtCore import QAbstractListModel, Qt
5+
from PyQt5.QtWidgets import QApplication, QMainWindow
6+
from PyQt5.QtGui import QIcon
7+
8+
from Form import Ui_MainWindow
9+
10+
11+
class TodoModel(QAbstractListModel):
12+
def __init__(self, todos=None):
13+
super().__init__()
14+
self.todos = todos or []
15+
self.completed_icon = QIcon("tick.png")
16+
17+
def get_loaded_data(self, data: list):
18+
self.todos = data
19+
20+
def add_todo(self, todo: tuple):
21+
self.todos.append(todo)
22+
23+
def delete(self, index):
24+
del self.todos[index.row()]
25+
26+
def complete(self, index):
27+
self.todos[index.row()] = (True, self.todos[index.row()][1])
28+
29+
def data(self, index, role):
30+
if role == Qt.DisplayRole:
31+
text = self.todos[index.row()][1]
32+
return text
33+
if role == Qt.DecorationRole:
34+
status = self.todos[index.row()][0]
35+
if status:
36+
return self.completed_icon
37+
38+
def rowCount(self, index):
39+
return len(self.todos)
40+
41+
42+
class Form(QMainWindow, Ui_MainWindow):
43+
def __init__(self):
44+
super().__init__()
45+
46+
self.setupUi(self)
47+
self.model = TodoModel()
48+
49+
self.init_ui()
50+
51+
def init_ui(self):
52+
self.todoView.setModel(self.model)
53+
self.addButton.clicked.connect(self.add_todo)
54+
self.deleteButton.clicked.connect(self.delete)
55+
self.completeButton.clicked.connect(self.complete)
56+
self.load_data()
57+
self.show()
58+
59+
def load_data(self):
60+
try:
61+
with open("data.json", "r") as file:
62+
data = json.load(file)
63+
self.model.get_loaded_data(data)
64+
except FileNotFoundError:
65+
pass
66+
67+
def save_data(self):
68+
with open("data.json", "w") as file:
69+
json.dump(self.model.todos, file)
70+
71+
def add_todo(self):
72+
text = self.todoEdit.text()
73+
text = text.strip()
74+
if text:
75+
self.model.add_todo((False, text))
76+
self.model.layoutChanged.emit()
77+
self.todoEdit.setText("")
78+
79+
def delete(self):
80+
if self.todoView.selectedIndexes():
81+
items = self.todoView.selectedIndexes()
82+
for item in items:
83+
self.model.delete(item)
84+
self.model.layoutChanged.emit()
85+
self.todoView.clearSelection()
86+
87+
def complete(self):
88+
if self.todoView.selectedIndexes():
89+
items = self.todoView.selectedIndexes()
90+
for item in items:
91+
self.model.complete(item)
92+
self.model.dataChanged.emit(item, item)
93+
self.todoView.clearSelection()
94+
95+
def closeEvent(self, event):
96+
self.save_data()
97+
super().closeEvent(event)
98+
99+
100+
app = QApplication(sys.argv)
101+
form = Form()
102+
sys.exit(app.exec_())
43.1 KB
Loading[フレーム]

‎PyQt5/QtWidgets/Qt icons.py‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import sys
2+
from PyQt5.QtCore import QSize
3+
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QStyle
4+
class Form(QMainWindow):
5+
def __init__(self):
6+
super().__init__()
7+
self.initUI()
8+
def initUI(self):
9+
self.resize(1000, 800)
10+
self.setWindowTitle("Qt icons")
11+
button = QPushButton("Button")
12+
style = button.style()
13+
icon = style.standardIcon(QStyle.SP_ComputerIcon)
14+
button.setIcon(icon)
15+
button.setIconSize(QSize(64, 64))
16+
self.setCentralWidget(button)
17+
self.show()
18+
app = QApplication(sys.argv)
19+
form = Form()
20+
sys.exit(app.exec_())

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /