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 714ed23

Browse files
committed
Sync
1 parent d7a46de commit 714ed23

File tree

7 files changed

+305
-21
lines changed

7 files changed

+305
-21
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[フレーム]
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import sys
2+
from PyQt5.QtCore import Qt, QAbstractTableModel
3+
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView
4+
class TableModel(QAbstractTableModel):
5+
def __init__(self, data):
6+
super().__init__()
7+
self.inner_data = data
8+
def data(self, index, role):
9+
if role == Qt.DisplayRole:
10+
return self.inner_data[index.row()][index.column()]
11+
def rowCount(self, index):
12+
return len(self.inner_data)
13+
def columnCount(self, index):
14+
return len(self.inner_data[0])
15+
class Form(QMainWindow):
16+
def __init__(self):
17+
super().__init__()
18+
19+
self.init_ui()
20+
def init_ui(self):
21+
self.resize(500, 300)
22+
self.setWindowTitle("Table Model")
23+
table = QTableView()
24+
data = [
25+
[2, 3, 4, 3, 1, 4, 1, 3],
26+
[3, 1, 5, 3, 5, 8, 2, 7],
27+
[8, 3, 6, 2, 3, 8, 2, 0],
28+
[1, 5, 2, 6, 8, 9, 2, 5],
29+
[5, 2, 5, 7, 2, 4, 1, 8]
30+
]
31+
model = TableModel(data)
32+
table.setModel(model)
33+
self.setCentralWidget(table)
34+
self.show()
35+
app = QApplication(sys.argv)
36+
form = Form()
37+
sys.exit(app.exec_())

‎PyQt5/QtWidgets/OpenFileDialog.py‎

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,27 @@
33
from pathlib import Path
44
user = str(Path.home())
55
class Form(QMainWindow):
6-
def __init__(self):
7-
super().__init__()
8-
self.initUI()
9-
def initUI(self):
10-
self.setGeometry(450, 250, 450, 300)
11-
self.setWindowTitle("Simple text reader")
12-
self.textEdit = QTextEdit(self)
13-
self.setCentralWidget(self.textEdit)
14-
QMenuBar = self.menuBar()
15-
fileMenu = QMenuBar.addMenu("File")
16-
openAct = QAction("Open", self)
17-
openAct.setShortcut("Ctrl+O")
18-
openAct.triggered.connect(self.showDialog)
19-
fileMenu.addAction(openAct)
20-
self.show()
21-
def showDialog(self):
22-
fileName = QFileDialog.getOpenFileName(self, "Select file to open", f"{user}\\Desktop", "*.txt")
23-
if fileName[0]:
24-
with open(fileName[0], "r") as file:
25-
content = file.read()
26-
self.textEdit.setText(str(content))
6+
def __init__(self):
7+
super().__init__()
8+
self.initUI()
9+
def initUI(self):
10+
self.setGeometry(450, 250, 450, 300)
11+
self.setWindowTitle("Simple text reader")
12+
self.textEdit = QTextEdit(self)
13+
self.setCentralWidget(self.textEdit)
14+
QMenuBar = self.menuBar()
15+
fileMenu = QMenuBar.addMenu("File")
16+
openAct = QAction("Open", self)
17+
openAct.setShortcut("Ctrl+O")
18+
openAct.triggered.connect(self.showDialog)
19+
fileMenu.addAction(openAct)
20+
self.show()
21+
def showDialog(self):
22+
fileName = QFileDialog.getOpenFileName(self, "Select file to open", f"{user}\\Desktop", "*.txt")
23+
if fileName[0]:
24+
with open(fileName[0], "r") as file:
25+
content = file.read()
26+
self.textEdit.setText(str(content))
2727
app = QApplication(sys.argv)
2828
form = Form()
2929
sys.exit(app.exec_())

0 commit comments

Comments
(0)

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