본문 바로가기

프로그래밍 관련119

PyQt TableWidget (심화1) Selection Mode에 대하여 현재 선택된 셀의 행번호 혹은 열번호 파악하기 특정 셀 선택해서 삭제하기(문제점 설명) 특정 셀 선택해서 삭제하기(해결책) 특정 셀의 속성 지정하기 (수정불가, 사용불가, 선택불가,drag&drop 불가 등등) (flag와 연관됨) Selection Mode에 대하여 마우스로 테이블을 선택했을 때, 선택되는 대상을 무엇으로 할지 고를 수 있다. 셀을 고르거나, 행을 고르거나, 열을 고르거나 할 수 있다. 아래 보면 이해 될거라 믿는다. def selectionBehavior(self) -> 'QAbstractItemView.SelectionBehavior': ... class SelectionBehavior(int): SelectItems = ... # type: QA.. 2021. 12. 3.
PyQt. TableWidget(기본) Table 기본 형태 생성 행 추가하기 & 추가된 행에 텍스트 채워넣기 테이블의 마지막에 행 한개씩 추가하기 테이블의 마지막에 행 1개씩 추가하기(2) 특정 셀에 접근하기. (해당 셀의 문자열 받아오기, 해당 셀의 문자열 set하기) 아무 것도 추가하지 않은 비어있는 셀에 관해 유의할 점 테이블 행 삭제 테이블 행 전부 삭제 Table 기본 형태 생성 import sys from PyQt5.QtWidgets import * class MyWindow(QMainWindow): def __init__(self): super().__init__() self.setupUI() def setupUI(self): self.setGeometry(800, 200, 600, 300) self.ta1 = QTableWid.. 2021. 12. 3.
파이썬. 클래스 상속과 생성자에 대하여. 그리고 super에 대하여 자식 클래스에서 따로 생성자를 선언하지 않으면 자식 객체를 생성하면 자동으로 부모클래스의 생성자를 실행한다. class paraent(): def __init__(self,input1): print("부모 생성자 실행. 인풋 파라미터는") print(input1) class child(paraent): pass test_var=child("안녕") 근데 위 예시를 보면, paraent클래스의 생성자가 실행되려면 객체를 만들때 input 객체 1개가 필요하다. 따라서, test_var=child() 코드를 이렇게만 짜면 argument가 모자라다는 에러가 발생한다. 왜냐면 child 클래스는 따로 생성자를 정의하지 않았기 때문에, default로 paraent의 생성자를 호출해야하는데 paraent의 생성.. 2021. 12. 2.
파이썬 클래스. 구조체 1. 클래스 선언을 하되 선언만 해두고 안에 새부내용 없을 경우 pass를 사용 class Calculator(): pass 2. 생성자가 없는 타입의 클래스 클래스를 선언할 때 생성자가 필수인 것은 아니다. class Test1(): var1=1 var2=2 var3=3 def fun1(self,input1,input2): print("출력값은 input1= %d, input2=%d" %(input1,input2)) print("var1값은 %d " %self.var1) #참고중요사항 print(var1값은 %d " %var1) #이렇게하면 실행안된다. 클래스 안에 var1 선언돼있지만 self 안붙이면 인식못한다. test_var=Test1() test_var.fun1(5,6) #출력결과: 출력값은 .. 2021. 12. 2.
PyQt . Context Menu (마우스 우클릭 메뉴 만들기) 4.6 컨텍스트 메뉴 - 공학자를 위한 PySide2 (wikidocs.net) 취미로 하는 프로그래밍 !!! :: PyQt5 -- context menu 사용법 3가지 (QTableWidget 사용함) (tistory.com) 위 두사이트 참고하여 공부해서 정리할 것 context menu란? 마우스 오른쪽 눌렀을 때 저렇게 메뉴 띄우는 기능을 말한다. import sys from PyQt5.QtWidgets import * from PyQt5 import QtCore class MyWindow(QMainWindow): def __init__(self): super().__init__() self.setupUI() def setupUI(self): self.setGeometry(800, 200, 800.. 2021. 12. 2.
PyQt 클래스 상속에 대하여 파이썬. 클래스 상속과 생성자에 대하여. 그리고 super에 대하여 (tistory.com) (위의 글 참고하면 배경지식 습득가능) PyQt 모듈에는 매우 많은 다양한 클래스가 사전에 정의되어있음 이런 클래스에 정의된 메소드 중에, 유저가 메소드 오버라이드를 해서 재정의 해서 써야하는 케이스가 종종있다. 그 경우, PyQt에서 제공하는 클래스를 상속 받아서 임의의 클래스를 만들어야하는데 아래 예시를 보자. QListWidget 클래스를 상속받아서 drop_list 라는 임의의 클래스를 정의하고 있다. class drop_list(QListWidget): def __init__(self,input): super(drop_list,self).__init__(input) #super().__init__(inp.. 2021. 12. 1.
메소드 오버라이딩/ 오버로딩 개념 메소드 오버로딩이란 클래스 A 가 있고, 클래스 A를 상속받아서 만든 클래스 B가 있을 때 클래스 B는 클래스 A를 상속받았기 때문에, 클래스 B 에서는 클래스 A에 정의된 fun_A를 호출 할 수 있음. 근데 이 때, 클래스 B 에서 fun_A를 다시 재정의해서 원래 클래스 A에 정의된 fun_A랑 별개로 기능하는 펑션을 만들어 쓰는걸 메소드 오버로딩이라고 한다. 즉, 자식이 부모의 메소드를 그대로 안쓰고 다시 재정의해서 쓰는걸 말한다. class paraent(): def fun_a(self): print("나는 부모의 펑션이다.") class child(paraent): pass class child_override(paraent): def fun_a(self): print("나는 물려받은거 재정의.. 2021. 11. 28.
임베디드 리눅스 그리고 부트로더 그리고 u-boot ※ 엄청 예전에 교육들은거 기억나는대로 대강 쓴거라 틀리고 부정확한 내용이 많은듯. 나중에 공부해서 내용 보강 필요. 우선은 대강 개요만 적어놓기 임베디드 리눅스 SW가 실행될 타겟보드가 있다. 이 SW가 타겟보드에서 실행되려면 이 SW가 타겟보드의 Flash 에 Flashing이 되어있어야 한다. 타겟보드에 JTAG이 있다면 JTAG을 이용해서 Flashing을 하면 될 것이다. JTAG이 없는 경우 취할 수 있는 방법중에 부트로더를 사용하는 방법이 있다. 부트로더도 종류가 많은데 유명한 것중 하나가 U-Boot 이다. (부트로더 SW이름임) U-Boot를 사용해서 타겟보드에 리눅스 SW를 Flashing 할 수 있다. 근데 생각해보면 U-Boot도 SW 니까, U-Boot가 타겟보드에서 실행되려면 U.. 2021. 11. 25.
빌드.컴파일 그리고 makefile에 대하여 make 파일의 개요 리눅스 gcc에 대하여 1 (tistory.com)에서 gcc의 개념에 대해서 간략하게 알아보았다. gcc는 컴파일러 중 하나라고 하였다. 그래서 위 글에서 설명하는 내용은 사실 gcc에만 해당되는건 아니고 대부분의 다른컴파일러도 사용방법이 비슷하다. 근데 빌드해야 할 소스코드의 갯수가 몇 개 없을 때는 앞에서 말한것처럼 타이핑 해서 컴파일 하면되는데 프로젝트가 방대해지면 빌드 할 때 마다 이렇게 일일이 cmd에 명령을 쳐서 빌드하기가 어려워진다. 그래서 빌드와 관련된 이런저런 옵션,셋팅과 관련된 내용을 makefile 이라는 파일에 미리 작성해놓으면 일일이 cmd 창에 "gcc ... 어쩌구" 명령을 칠 필요가 없게 된다. 대신에 그냥 make 라는 명령만 실행하면 makefile.. 2021. 11. 25.