Develop
pyqt를 이용한 QTreeWidget 이용 및 리스트 간 항목 이동 구현하기
Dork94
2019. 4. 13. 03:19
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 다운받을 수 있다.
구글에도 위와 같은 형태에 대해 많은 자료가 없어서 삽질 많이 했다 :(