일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- libtins
- 이태원 클라쓰 15회 예고
- 금리인하
- 성남 코로나 확진자
- 미국 금리인하
- 불가피
- 조희연
- 김영권
- 학교 개학 연기 4월
- 픽크루
- 리리남매
- 은혜의 강 교회
- 뭉쳐야 찬다
- 킹덤 고근희
- 해킹
- 성남은혜의강교회
- 폰폰테스트
- 스콜피온킹
- 김재석
- 김영권 아내
- 최강욱
- 스페인 코로나
- 홍혜걸
- 이상형 만들기
- 고민정
- 이지혜
- 양적완화
- 임영규
- 유튜버 김재석
- 제넥신
Archives
- Today
- Total
Dork's port
pyqt를 이용한 QTreeWidget 이용 및 리스트 간 항목 이동 구현하기 본문
GUI 공부를 위해서 pyqt를 사용하고 있는데, top-down 방식으로 공부하려니 여간 쉽지가 않다.
구성이 모든 class로 이뤄져있고, 객체간의 관계가 복잡해서 document를 정독하고 나서야 겨우 구현에 성공했다.
소스 코드는 다음과 같다.
import sys
from PyQt5.QtWidgets import QApplication, QWidget,QDesktopWidget,QPushButton, QBoxLayout,QTreeWidget,QTreeWidgetItem
__auther__='d0rk'
class my_app(QWidget):
def __init__(self):
super().__init__()
self.add_btn=QPushButton('추가')
self.del_btn=QPushButton('삭제')
self.wishlist=QTreeWidget(self)
self.lecture_list=QTreeWidget(self)
self.initUI()
def initUI(self):
self.setWindowTitle('QTree example')
self.init_lectures()
self.resize(800, 480)
self.center()
self.show()
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
def init_lectures(self):
headers = ['과목','시간','캠퍼스','강의실','교수명']
self.lecture_list.setColumnCount(len(headers))
self.lecture_list.setHeaderLabels(headers)
self.wishlist.setColumnCount(len(headers))
self.wishlist.setHeaderLabels(headers)
list_layout = QBoxLayout(QBoxLayout.LeftToRight)
list_layout.addWidget(self.lecture_list)
list_layout.addWidget(self.wishlist)
lecture_root = QTreeWidget.invisibleRootItem(self.lecture_list)
datas = ['하','이','루','방','가']
item = QTreeWidgetItem()
for idx, data in enumerate(datas):
item.setText(idx, data)
lecture_root.addChild(item)
datas = ['바','이','루','방','가']
item = QTreeWidgetItem()
for idx, data in enumerate(datas):
item.setText(idx, data)
lecture_root.addChild(item)
datas = ['D', '0', 'R', 'K', '_']
item = QTreeWidgetItem()
for idx, data in enumerate(datas):
item.setText(idx, data)
lecture_root.addChild(item)
btn_layout = QBoxLayout(QBoxLayout.RightToLeft)
btn_layout.addWidget(self.add_btn)
btn_layout.addWidget(self.del_btn)
main_layout = QBoxLayout(QBoxLayout.TopToBottom)
main_layout.addLayout(list_layout)
main_layout.addLayout(btn_layout)
self.add_btn.clicked.connect(self.move_item)
self.del_btn.clicked.connect(self.move_item)
self.setLayout(main_layout)
return main_layout
def move_item(self):
sender = self.sender()
if self.add_btn == sender:
source = self.lecture_list
target = self.wishlist
else:
source = self.wishlist
target = self.lecture_list
item = QTreeWidget.invisibleRootItem(source).takeChild(source.currentIndex().row())
QTreeWidget.invisibleRootItem(target).addChild(item)
if __name__=='__main__':
app = QApplication(sys.argv)
ex = my_app()
sys.exit(app.exec_())
소스코드는 https://github.com/JangHanbin/pyqt_QtreeWidget 다운받을 수 있다.
구글에도 위와 같은 형태에 대해 많은 자료가 없어서 삽질 많이 했다 :(
'Develop' 카테고리의 다른 글
Python에서 matplotlib이용 시 font type 변경하기 (2) | 2019.05.16 |
---|---|
PyQt에서 QPlainText를 이용해 정보 출력하기(색상 변경) (2) | 2019.04.14 |
Python에서 db 연동하기(mysql, mariadb) (4) | 2019.03.28 |
apktool 리패키징 오류해결 (2) | 2019.02.25 |
Python pycrypto 설치시 구문 오류 Syntax error stdint (2) | 2019.02.18 |
Comments