이번에는 라인 에디터(Line Editor)를 추가해보겠다.
#!/usr/bin/env python3 # Copyright (C) 2011년 bluekyu (http://blog.bluekyu.me/) # 이 프로그램은 자유 소프트웨어입니다. 소프트웨어의 피양도자는 자유 소프트웨어 # 재단이 공표한 GNU 일반 공중 사용 허가서 2판 또는 그 이후 판을 임의로 # 선택해서, 그 규정에 따라 프로그램을 개작하거나 재배포할 수 있습니다. # 이 프로그램은 유용하게 사용될 수 있으리라는 희망에서 배포되고 있지만, # 특정한 목적에 맞는 적합성 여부나 판매용으로 사용할 수 있으리라는 묵시적인 # 보증을 포함한 어떠한 형태의 보증도 제공하지 않습니다. 보다 자세한 사항에 # 대해서는 GNU 일반 공중 사용 허가서를 참고하시기 바랍니다. # 라인 에디터 추가. import sys from PyQt4.QtCore import * from PyQt4.QtGui import * __version__ = "1.4.1" class Form(QDialog): def __init__(self, parent=None): super().__init__(parent) self.label = QLabel("Hello, PyQt!") self.lineEdit = QLineEdit("This is LineEdit Widget") layout = QVBoxLayout() layout.addWidget(self.label) layout.addWidget(self.lineEdit) self.setLayout(layout) self.setWindowTitle("Main Dialog") if __name__ == "__main__": app = QApplication(sys.argv) form = Form() form.show() app.exec_()
레이블을 추가해봤듯이 같은 방법으로 라인 에디터의 인스턴스를 생성해서 위젯으로 추가해주면 된다. 그러나 라인 에디터에 편집만 가능할 뿐 특별한 것은 없다.
이제 여기에 특별한 기능을 추가해보자!
라인 에디터에 글을 입력한 후 엔터를 누르면 그 입력한 글이 레이블에 나타나게 하는 것이다.
-__version__ = "1.4.1" +__version__ = "1.4.2" class Form(QDialog): def __init__(self, parent=None): @@ -28,9 +28,15 @@ class Form(QDialog): layout = QVBoxLayout() layout.addWidget(self.label) layout.addWidget(self.lineEdit) - self.setLayout(layout) + + self.connect(self.lineEdit, SIGNAL("returnPressed()"), + self.UpdateLabel) + self.setWindowTitle("Main Dialog") + + def UpdateLabel(self): + self.label.setText(self.lineEdit.text()) if __name__ == "__main__": app = QApplication(sys.argv)diff 를 이용해서 차이점만 보겠다.
self.connect 라는 메소드를 이용하고 있다. 이것은 이벤트를 처리해주는 메소드이다. 특히, Qt에 이벤트 처리 방법 중 하나인 시그널-슬롯(Signal-Slot) 기능이다.
이 메소드를 이용해서 self.lineEdit에서 나오는 시그널을 받게 된다. 보내는 시그널을 아주 다양할 것이다. 텍스트가 변경되었다던가, 엔터가 눌렸다던가, 마우스가 클릭되었다던가 등등...
그러나 이 메소드로는 오직 returnPressed() 라는 시그널만 받겠다. 즉, 엔터가 눌렸을 때에만 작동한다는 것이다. 그러면 엔터가 눌렸을 때 작동해야 할 반응이 필요할 것이다. 이것을 Slot으로 사용하게 된다.
이후에 이를 더 자세하게 다루겠지만, Slot에 파이썬 메소드가 올 수 있다. 따라서 아래에 정의된 UpdateLabel 이라는 메소드를 슬롯으로 처리해주면, 엔터가 눌렸을 때 이 메소드가 실행이 된다.
메소드를 살펴보면, 레이블에 텍스트를 설정해주라고 되어 있고, 이 텍스트는 라인 에디터의 텍스트를 넣으라고 되어 있다.
따라서 엔터를 누르면 레이블에 라인 에디터의 텍스트가 나타나게 되는 것이다!
추가로 좀 더 살펴보자.
-__version__ = "1.4.2" +__version__ = "1.4.3" class Form(QDialog): def __init__(self, parent=None): @@ -36,7 +36,8 @@ class Form(QDialog): self.setWindowTitle("Main Dialog") def UpdateLabel(self): - self.label.setText(self.lineEdit.text()) + self.label.setText("<font color=red><b>" + self.lineEdit.text() + + "</b></font>") if __name__ == "__main__": app = QApplication(sys.argv)이번에는 라인 에디터에서 엔터를 친 후 레이블 텍스트를 변경할 때 색상과 강조를 해보겠다.
특별한 것은 아니고, 레이블에서 Rich Text라 하면서 HTML 포맷을 지원해준다. 이를 이용해서 font 태그와 b 태그를 이용해서 텍스트의 글자 색을 빨간색으로, 그리고 굵게 만들어 본 것이다.
HTML 태그를 찾아보고 이를 수정해보면 다양한 방식으로 글자를 나타낼 수 있을 것이다. 글자 색이나 크기, 이탤릭 등등...
댓글 없음:
댓글 쓰기