(PyQt6)4. sqlite3와 PyQt6 UI 동적으로 만들기
- 목차 글 : 2024-08-06-pyQt6 Index
- 이전 글 : 2024-09-03-PyQt6 UI 꾸미기
목차
- 파이썬 기본 메소드
getattr
,setattr
,hasattr
sqlite3
소개- 기본적인 사용방법
sqlite3
로 GUI 만들기- MVVM 유사스타일로 작성하기
- MVVM으로 짤 때 경로 조심할 것
파이썬 내장 함수
PyQt를 다루다 보면 class
를 반드시 다루게 되는데, 그 중 알아두면 편한 내장함수 몇 가지를 소개해보려고 한다.
-attr()
메소드
attr()
로 끝나는 함수는 총 4개가 있다. 여기서 delattr()
는 굳이 쓸 이유는 없어서 나머지 3개 위주로 보자.
getattr()
이 함수는 클래스 내부에 존재하는 attribute를 불러올 때 쓰는 기능이다. 예를 들어, 내가 Person.age
라는 속성을 불러오고 싶을 때, Person.taxi()
라는 메소드를 불러오고 싶을 때 속성/메소드 이름만 알 때 쓴다.
1
2
3
4
5
6
7
8
9
10
11
12
13
class Person :
def __init__(self, name="춘식", age="20", money=10000) :
self.name = name
self.age = age
self.money = money
def taxi(self) :
if self.money < 5000 :
print("not enough money")
return
else :
print("5000 purchased")
self.money -= 5000
return
위와 같은 코드가 있다고 치자. 여기서 나는 "money"
라는 텍스트로 Person.money
를 접근하고 싶다면 아래와 같이 고쳐 사용할 수 있다.
이 함수의 많이 쓰이는 2가지 상황은 다음과 같다.
setattr
로 생성한 함수 attribute/method를 접근할 때- 반복문으로 처리하고 싶을 때.
두 번째 사례에 대해서 예시를 들어보겠다.
1
2
3
4
5
6
7
8
9
10
11
class todolist :
def __init__(self) :
self.flag1 = False
self.flag2 = False
#... 중략
self.flag100 = False
todo = todolist()
for i in range(1,101) :
flag = getattr(todo, f"flag{i}")
print(f"flag{i} = {flag}")
이런 식으로 list
나 dict
로 여러 attribute/method를 접근해서 처리할 수 있게 만들 수 있다.
hasattr()
따라서 hasattr()
로 해당 attribute/method가 존재하는지 확인을 하고 getattr()
으로 접근하는게 안전하다.
setattr()
getattr()
, hasattr()
처럼 object와 속성명을 받는데 세 번째 인자로 입력할 값을 설정할 수 있다. 메소드 또한 생성할 수 있다.
todolist
클래스를 임의로 수정해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class todolist :
def __init__(self) :
self.flag1 = False
self.flag2 = False
todo = todolist()
for i in range(3,11) :
setattr(todo, f"flag{i}", True) # flag3 ~ flag10 속성 생성
for i in range(1,11) :
attrname = f"flag{i}"
f = getattr(todo, attrname)
setattr(todo, attrname, not f)
def printall(obj) :
for i in range(1, 11) :
attrname = f"flag{i}"
print(getattr(obj,attrname))
printall(todo)
대신, 계획없이 어떤 속성을 추가하는데만 쓰면 어떤 속성, 메소드가 있는지 IDE가 감지를 못하니 되도록이면 남발하지 말자.
- 다음 글 : 2024-09-03-PyQt6와 QThread 그리고 Scipy
Reference
- ⭐Python docs : 내장함수
This post is licensed under CC BY 4.0 by the author.