0. 한글처리
    - 참조url : https://syriusta.tistory.com/14
    - 파이썬 코드 첫문장에 아래와 같이 한다.
       #!C:\Python34\python.exe
       #-*- coding: utf-8 -*- <-- utf-8로 문자를 처리하는 부분.

 

1. app.exec_();
    - 이벤트 루프 (Event Loop)
    - QApplication클래스의 객체를 생성한 후 exec_ 메서드를 호출하는 순간 생성된다.
    - 한번 생성된 이벤트 루프는 사용자가 윈도우를 닫을 때까지 실행되면서 위젯에서 발생한 시그널을
       처리하는 슬롯을 호출하는 역할을 한다.

 

2. Widget(위젯)
    - 사용자 인터페이스(UI, 화면)을 구성하는 핵심 요소이다.
    - QT Designer 에서 사용되는 객체(label, edit, button...)들을 의미한다.

 

3. slot (슬롯)
    - PyQt에서는 특정 시그널(event)이 발생했을 때 호출되는 함수 또는 메서드를 slot이라고 한다.

 

4. dialog (다이알로그)
    text,ok = QInputDialog.getInt(self, "나이", "나이를 입력하시오."); #int형
    text,ok = QInputDialog.getDouble(self, "나이", "나이를 입력하시오."); #double 형
    text,ok = QInputDialog.getText(self, "나이", "나이를 입력하시오."); #문자형
    text,ok = QInputDialog.getItem(self, "나이", "나이를 입력하시오."); #항목 선택
 

4.1 MessageBox (메세지 box)
    QMessageBox.about(self, "제목명", "상세내용"):

5. connect
   - 예) btn.clicked.connect(clicked_slot);
   - 시그널(event)과 슬롯(function, method)을 이벤트 루프를 생성하기 전에 연결(connect)한다.
     . 버튼 클릭 시 clicked_slot function을 호출 하도록 연결(connection)을 설정한다.
     . 설정 후 사용자가 btn 을 클릭 시 clicked_slot function을 호출 및 수행 한다.


6. class
    - class name(inherit_Calssname)
    - name : class name
    - inherit_Calssname : 상속class name

 

7. __init__
    - class 생성자 method
    - 예) def __init__(self)
          super().__init__();

 

8. 외부 모듈
    1. 브라우져 실행하기
       - import webbrowser
         url = "http://naver.com";
         webbrowser.open(url);

 

8. visible 객체 생성 1
    1. button생성
       - btnSave = QPushButton("저장", self); #버튼 객체 생성
         btnSave.move(20, 50); #move() : 버튼 위치 이동
         btnSave.clicked.counect(self.btnSave_clicked); #버튼 slot 연결

    2. Label 생성
       - self.label = QLabel("Message : ", self);
         self.label.move(20, 20);
         self.label.resize(200, 20)

    3. Edit 생성
       - self.lineEdit = QLineEdit("", self);
         self.lineEdit.move(20, 20);
         self.lineEdit.textChanged.connect(self.lineEditChanged); #텍스트값이 변경될 때 발생
         self.lineEdit.returnPressed.connect(self.lineEditReturnPressed); #에터 키를 눌렀을 때 발생
    4. Radio button 생성
       - 생성
         self.radio1 = QRadiobutton("항목1", self)
         self.radio1.move(20, 20);
         self.radio1.setChecked(True);
         self.radio1.clicked.connect(self.radioButton_clicked);
         self.radio1 = QRadiobutton("항목1", self)

         self.radio2.move(20, 40);
         self.radio2.setChecked(True);
         self.radio2.clicked.connect(self.radioButton_clicked);
         self.radio2 = QRadiobutton("항목2", self)
     - 클릭된 radion 알아내기
         def radioButton_clicked(self):
             msg = "";
             if self.radio1.isChecked():
                msg = "항목1 선택";
             if self.radio2.isChecked():
                msg = "항목2 선택";
     5. checkbox 생성
        - 생성
          self.checkBox1 = QCheckBox("항목1", self);
          self.checkBox1.move(20, 20);
          self.checkBox1setChecked(True);
          self.checkBox1.clicked.connect(self.checkBoxStateChanged);

          self.checkBox2 = QCheckBox("항목2", self);
          self.checkBox2.move(20, 40);
          self.checkBox2setChecked(True);
          self.checkBox2.clicked.connect(self.checkBoxStateChanged);

      - 클릭된 radion 알아내기
         def radioButton_clicked(self):
              msg = "";
              if self.checkBox1.isChecked():
                 msg = "항목1 선택";
              if self.checkBox2.isChecked():
                 msg = "항목2 선택";

6. QGroupBox 생성
    - 생성
        groupBox = QGroupBox("항목 그룹", self);
        groupBox.move(10, 10);
        groupBox.resize(150, 80);
    - 참고
       radio을 QGroupBox위에 위치 하기 위해서는 QGroupBox를 먼저 생성 후 radio을 만들어야 한다.
      순서가 바뀐 경우 radio button이 여러게 동시 선택된다.

 

7. QSpinBox 생성
    - 생성
       self.spinBox = QSpinBox(self);
       self.spinBox.move(40, 20);
       self.spinBox.resize(60, 20);
       self.spinBox.valueChanged.connect(self.spinBoxValueChagned);
    - 값 얻기
       def self.spinBoxValueChagned(self):
            val = self.spinBox.value();

 

9. visible 객체 생성 2
    0. 참고url : https://m.blog.naver.com/sisosw/221419144691
       1. QTableWidget 생성
          - 생성
            self.tableWidget = QTableWidget(self);
            self.tableWidget.resize(400, 300);
            self.tableWidget.setRowCount(2);
            self.tableWidget.setColumnCount(2);
            self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers);

            self.tableWidget.setItem(0, 0, QTableWidgetItem("(0,0)"));
            self.tableWidget.setItem(0, 1, QTableWidgetItem("(0,1)"));
            self.tableWidget.setItem(1, 0, QTableWidgetItem("(1,0)"));
            self.tableWidget.setItem(1, 1, QTableWidgetItem("(1,1)"));
         - Head Lable 등록
            column_headers = ["학번", "이름", "학년"];
            self.tableWidget.setHorizontalHeaderLables(column_headers);
         - row별 값 set
            students = { "no" : [ "2018001", "2018002", "2018003" ],
                             "name" : [ "홍길동", "이순신", "김성철" ],
                             "group" : [ "1학년", "2학년", "3학년" ] };
            column_idx_lookup = { "no" : 0, "name" : 1, "group" : 2 };

            for k, v in students.items():
                col = column_idx_lookup[k];
                print(k, v, col);
                for row, val in enumerate(v):
                   item = QTableWidgetItem(val);
                   if col == 2:
                      item.setTextAlignment(Qt.AlignVCenter | Qt.AlignRight);
                      self.tableWidget.setIem(row, col, item);

           self.tableWidget.resizeColumnsToConTents();
           self.tableWidget.resizeRowsToContents();

Posted by 농부지기
,