WPF 프로그램에서의 Python 실행 방법
·
사소한 아이의 소소한 스킬/C#
열심히 WPF로 프로그램을 개발했다.. 최종 완성시키고 클라이언트에게도 확인 다 받았는데... 뜬금없이 Python 하나만 실행할 수 있게 해달란다... 뭐 Process 써서 .py 파일만 하나 실행하면되겠지. 라고 맘 편히 생각하고, 놀다가 이제 개발좀 해볼까 하고 개발을 시작했다. 환경설정에 Python 해주고. Command창에서 Python 실행되는거 확인했으니 이제 Process로 실행만 해주면 되겠네 Process cmd = new Process();cmd.StartInfo.FileName = @"python";cmd.StartInfo.Arguments = @"C:\test.py";cmd.Start(); 간단하게 하면 되겠지. 실행 고 에..?? 왜 안되지...... Command창이 떳다가..
QCheckBox 사용법
·
사소한 아이의 소소한 스킬/PyQT5
import sys from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox, QVBoxLayout from PyQt5.QtCore import Qt class MyApp(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): cb = QCheckBox('Show title', self) # Text 설정 cb.setText("SetText") # Text 가져오기 print(cb.text()) # 상태 변경 cb.toggle() # 상태 확인하기 print(cb.isChecked()) # 상태 변경 이벤트 cb.stateChanged.connect(self.cha..
QTabWidget 사용법
·
사소한 아이의 소소한 스킬/PyQT5
import sys, os from PyQt5.QtWidgets import QTabWidget, QLabel, QWidget, QVBoxLayout, QApplication, QMessageBox class BaseWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.tabs = QTabWidget() self.tabs.blockSignals(True) #just for not showing the initial message self.tabs.currentChanged.connect(self.onChange) #changed! self.lbl1 = QLabel("Label 1") self...
파일 경로 관련 API들
·
사소한 아이의 소소한 스킬/Python
개발을 하다보면 경로 관련해서 계산해야 할 때가 있다. 물론 QFileDialog등과 같은 api를 이용해서 선택한 파일의 path를 가져올 수도 있지만... 현재 실행되는 위치에서 상대적으로 위치를 계산하거나.. 절대적인 경로를 가져오거나 할때는 굳이 FileDialog를 안쓰고 가져올 수도 있다... 그 방법 들이다..! 현재 폴더 가져오기 os.getcwd() Output: C:\Users\Administrator\PycharmProjects\pythonProject2\ 디렉토리 위치 변경하기 os.chdir("C:\Program Files (x86)\ESTsoft") 절대 경로 가져오기 print(os.path.abspath("")) Output: C:\Users\Administrator\Pych..
DFS(깊이우선탐색)
·
사소한 아이의 소소한 스킬/알고리즘
이번엔 DFS를 알아보도록하자. DFS란 한국말론 깊이우선 탐색(Depth First Search)이다. 깊이우선탐색은 무엇인가.. 무언가 탐색을 할때 동일한 레벨의 노드를 탐색을 먼저 하는것이 아니라 아랫레벨의 노드를 우선 탐색하는 시스템이다. 역시 말로는 이해가 안가니... 이미지로...... 사진과 같은 트리가 존재할때 깊이우선의 경우에 이렇게 순회하게된다.(우측, 좌측의 순서는 없음) A -> B -> H -> M -> J -> K -> L -> I -> C -> D -> G -> E -> F 대충 느낌이 팍 오죠? 그럼 어떤식으로 구현하면 될지 생각을 해보면... stack 구조를 이용해서 노드를 추가한 후 추가한 노드를 다시 탐색하고 추가한 노드를 다시 탐색하고 하면 깊이 우선이 가능!!!! ..
BFS(너비우선탐색)
·
사소한 아이의 소소한 스킬/알고리즘
이번엔 BFS를 알아보도록하자. BFS란 한국말론 너비우선 탐색(Breadth First Search)이다. 너비우선탐색은 무엇인가.. 깊이와 반대다... 무언가 탐색을 할때 추가된 노드를 우선적으로 탐색하는것이 아니라 이미 추가되어있는 노드를 우선적으로 탐색하는 것.. 역시 말로는 이해가 안가니... 이미지로...... (DFS와 동일한 노드) 사진과 같은 트리가 존재할때 깊이우선의 경우에 이렇게 순회하게된다. (우측, 좌측의 순서는 없음) A -> B -> C -> H -> D -> I -> J -> M -> E -> G -> K -> F -> L 대충 느낌이 팍 오죠? 그럼 어떤식으로 구현하면 될지 생각을 해보면... DFS의 경우 추가된 노드를 우선적으로 순회했지만.. 이번에는 이미 추가되어있는 ..
재귀함수
·
사소한 아이의 소소한 스킬/알고리즘
재귀함수에 대해 알아보자. 재귀함수란 자기 자신을 다시 호출한다는 의미.... 자기자신을 다시 호출하는데 파라미터를 바꿔가면서 호출한다. 여기서 무한정 자기자신을 호출할 수 있기에 종료조건은 필수로 필요하다. 그리하여 반복계산할수있도록 하는 것.. 이렇게만 말하면 헷갈리니..예제 코드를.. def factorial(n: int) -> int: # 종료조건 if n int: if x > y: return x else: return y def max_array(array: int, len: int) -> int: if len == 1: return array[0] else: return max(array[len - 1], max_array(array, len - 1)) temp_array = [33, 44,..
평균 구하기
·
사소한 아이의 소소한 스킬/Python
이번엔 평균 구하기다...... 또 다시 C#을 먼저 말해본다면.. 리스트에 .Sum(), .Average() 함수가 존재하여 호출만 해주면 끝.... C# 너무 편하죠............... 파이썬도 쉽게 사용하기 위한 언어니깐 당연히 편한게 있겠지!!!! 바로 코드 ㄱㄱ import statistics arr1 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] arr2 = [15, 26, 48, 59, 57, 68, 35, 24] # 평균 구하기 result1 = statistics.mean(arr1) result2 = statistics.mean(arr2) # 출력 print(f"average1 : {result1}") print(f"average2 : {result..
시간 측정하기
·
사소한 아이의 소소한 스킬/Python
프로그램을 개발하다보면.... 특정 모듈이... 특정 함수가.. 시간이 얼마나 걸리는지 체크해야할때가 있다. WPF의 경우 Stopwatch라는 클래스가 따로 존재하여 start, stop함수를 통해 계산했었는데... 파이썬은...어떤함수가 있을지 알아보도록 하자.. 파이썬의 기본 모듈인 time 모듈을 확인하면 시간측정을 할 수 있다 바로 코드 ㄱㄱ import time start = time.time() print("시간측정") print("some function....") end = time.time() print(f"{end - start:.5f} sec") Output: 0.00000 sec 너무 간단한 print문 2개라.. 0.000초가 나온다... 좀 시간이 걸릴만한걸하면... impor..
QDialog&QMessageBox 사용법
·
사소한 아이의 소소한 스킬/PyQT5
import sys, os from PyQt5.QtWidgets import * class BaseWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.lbl = QLabel("EXAMPLE") self.btn_1 = QPushButton("QInputDialog") self.btn_1.clicked.connect(self.Input_showDialog) self.btn_2 = QPushButton("QColorDialog") self.btn_2.clicked.connect(self.Color_showDialog) self.btn_3 = QPushButton("QFontDialog") self..
QSpinBox 사용법
·
사소한 아이의 소소한 스킬/PyQT5
import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QSpinBox, QDoubleSpinBox, QVBoxLayout class MyApp(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.lbl1 = QLabel('QSpinBox') self.spinbox = QSpinBox() self.spinbox.setMinimum(-10) self.spinbox.setMaximum(30) # self.spinbox.setRange(-10, 30) self.spinbox.setSingleStep(2) self.lbl2 = QLabel('..
QDateTimeEdit 사용법
·
사소한 아이의 소소한 스킬/PyQT5
import sys from PyQT5.QtWidgets import QApplication, QWidget, QLabel, QDateTimeEdit, QVBoxLayout from PyQT5.QtCore import QDateTime class MyApp(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.lbl = QLabel('QTimeEdit') self.lbl2 = QLabel('QTimeEdit') self.datetimeedit = QDateTimeEdit(self) self.datetimeedit.setDateTime(QDateTime.currentDateTime()) self.dateti..
QComboBox 사용법
·
사소한 아이의 소소한 스킬/PyQT5
import sys from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QLabel, QVBoxLayout from PyQt5.QtCore import Qt class MyApp(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): # 라벨 생성 self.l = QLabel('Option1', self) # 콤보 박스 생성 self.cb = QComboBox(self) # 콤보 아이템 추가 self.cb.addItem('Option1') self.cb.addItem('Option2') self.cb.addItem('Option3') self.cb.addIt..
Python 간단 팁
·
사소한 아이의 소소한 스킬/Python
리스트 역변환시키기 a=[“10”,”9",”8",”7"] print(a[::-1]) a.reverse() Output: ['7', '8', '9', '10'] # a[::-1]과 a.reverse()의 차이점 # a[::-1]의 경우 실 데이터 변경없이 거꾸로 출력만 진행하되 # reverse의 경우 실 데이터 자체를 역변환 시켜버림으로써 이 다음 작업 진행 시에도 역변환이 진행되었다는 것을 알고 있어야 한다. 리스트 합치기 a=[‘a’,’b’,’c’,’d’] b=[‘e’,’f’,’g’,’h’] for x, y in zip(a, b): print(x,y) Output: a e b f c g d h 리스트 내에서 빈번한 값 찾기 a = [1, 2, 3, 4, 2, 2, 3, 1, 4, 4, 4] print..
Wav 파일 헤더정보 보기
·
사소한 아이의 소소한 스킬/Python
def wav_print(file_path): # 파일 읽어오기 file = open(file_path, "rb") # 44바이트의 헤더정보 가져오기 data = file.read(44) # 44바이틔 헤더 정보를 Dictionary 형태로 저장하기 file_header = {"name": file_path, "ChunkID": data[0:4], "ChunkSize": int.from_bytes(data[4:8], byteorder='little'), "Format": data[8:12], "Subchunk1ID": data[12:16], "Subchunk1Size": data[16:20], "AudioFormat": int.from_bytes(data[20:22], byteorder='little')..
QThread & Custom Signal 예시
·
사소한 아이의 소소한 스킬/PyQT5
이번에는 QThread 사용법이다. 다른 언어에서도 다 사용하듯 1개의 쓰레드로 모든 기능을 처리한다는 것은 불가능에 가깝다. 특히나 UI가 있다면 더더욱.. (프리징현상 어쩔꺼야...) 그리하여 이번엔 QTthread이다. 정말 간단한 예제이며 QT에서는 QThread말고 QRunnable 등 다른 여러가지 Thread 사용법들이 있다.. 차차 하나씩 알아보고 이번엔 간단한 QThread만 알아보도록 하자 from PySide6.QtCore import * from PySide6.QtWidgets import * import sys import time # 내 돈 balance = 100 # 돈을 1씩 계속 없애는 QThread class Balance_decrease(QThread): # Custom..
파이썬 변수 타입설정??????
·
사소한 아이의 소소한 스킬/Python
파이썬은 기본적으로 아래와 같이 타입을 설정하지 않고 변수를 설정한다. # 자동적으로 int형 AAA = 22 # 자동적으로 string형 BBB = "string" # 자동적으로 list CCC = [1,2,3,4] 이러한 방식은 내가 사용하던 C#과 너무 헷갈리고.. 어떠한 타입으로 선언되는건지 헷갈린다. 선언자체는 문제없지만 해당 변수를 가지고 놀때 굉장히 헷갈린다...(일단 나는....) C#의 경우 int AAA = 22 string BBB = "string" List CCC = new List() { 1, 2, 3, 4 } ; 얼마나 보기 편한가.. 물론 C#에서도 var 변수가 있어서 python처럼도 선언할 수 있다...하지만.. var변수를 잘 안쓰고... 뭔가 명확하게 형을 선언하는것을..
list comprehension 간단 예
·
사소한 아이의 소소한 스킬/Python
x_list = [1.2, -1.3, 0., 2.2, 0., 5.3, 3.7] # 일반 if문 만을 이용하여 데이터를 입력한다. x1 = [value for value in x_list if value > 2] # 3항 연산자를 이용하여 데이터를 입력한다. x2 = [x if x > 2 else '' for x in x_list] print(x1) print(x2) 일반 if문과 삼항을 썼을때 결과는 좀 다르게 나온다. 일반의 경우 else문이 없기에 해당 조건이 해당되지 않을때 아무것도 수행하지않지만. 3항의 경우 else문이 있기에 특정 행위를 진행한다. 그리하여 최종적으로 나오는 결과가 달라질수밖에 없는 것 # x > 2에 해당되지 않는 항목은 list에 추가되지 않는다. [2.2, 5.3, 3.7..
QRadioButton 사용법
·
사소한 아이의 소소한 스킬/PyQT5
import sys from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox, QRadioButton, QVBoxLayout from PyQt5.QtCore import Qt class MyApp(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): rbtn1 = QRadioButton('First Button', self) # 라디오 버튼 텍스트 변경 rbtn1.setText('Change Text') # 라디오 버튼 텍스트 가져오기 print(rbtn1.text()) # 라디오 버튼 체크상태 확인 print(rbtn1.isChecked()) # 라디오 버튼 체..
Window, Label, Button 사용법
·
사소한 아이의 소소한 스킬/PyQT5
개인적으로는 라이센스때문에 PySide6를 사용하나.... PyQT5와 별 차이가 없기에.. PyQT5 관련된 자료를 올려보려고 한다.. 일단 처음엔 MainWindow와 간단한 라벨, 버튼 띄우기다 import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout class MyApp(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): btn1 = QPushButton('&Button1', self) btn1.setCheckable(True) btn1.toggle() btn2 = QPushButton(self) btn2.s..
아나콘다 환경에서 패키지 설치 실패시 방법
·
사소한 아이의 소소한 스킬/Python
현재 파이썬언어를 사용해보고있다.. 파이썬은 인터넷환경에서 pip install 기능을 이용하여 기타 패키지들을 설치할 수 있다 C#을 기준으로 한다면 비주얼 스튜디오에서 nuget을 이용하여 패키지를 설치하는것과 비슷한 맥락의 설치방법이다. 하지만 이것이 좀 개같은게... 설치가 잘 안된다... 특히나 내 경우에는 업무방이 인터넷이 안되기에.... 인터넷이 되도 안되는곳이 엄청나게 많기에.... 설치가 안된다.... 그리하여 오프라인으로 설치해야한다는 것.... 오프라인 설치방법은 인터넷 찾아보면 여러개 있지만.... 난 하나도 작동되지 않았다...... 그리하여 막 혼자 쌩쇼를 하며 찾아본 결과를 적어둔다!!! 일단 아나콘다/파이참 환경을 설치해준다 https://www.anaconda.com/pro..
008. Deque
·
사소한 아이의 소소한 스킬/Python
C#을 쓰면서 주로 list, dictionary등을 사용해왔다.. 물론 Queue도 메시지 처리하면서 많이 썼다 (중간에 메시지 처리를 안하는 것을 방지 하기 위하여) Python에서도 queue, list 등 모두다 지원하지만.. 추가로 Deque라는 것을 지원한다. 코드 ㄱ from collections import deque deq = deque() # Add element to the start deq.appendleft(10) # Add element to the end deq.append(0) # Pop element from the start deq.popleft() # Pop element from the end deq.pop() deque는 queue와는 다르게 맨 끝에 추가하거나, 맨..
008. Deque
·
사소한 아이의 소소한 스킬/Python
C#을 쓰면서 주로 list, dictionary등을 사용해왔다.. 물론 Queue도 메시지 처리하면서 많이 썼다 (중간에 메시지 처리를 안하는 것을 방지 하기 위하여) Python에서도 queue, list 등 모두다 지원하지만.. 추가로 Deque라는 것을 지원한다. 코드 ㄱ from collections import deque deq = deque() # Add element to the start deq.appendleft(10) # Add element to the end deq.append(0) # Pop element from the start deq.popleft() # Pop element from the end deq.pop() deque는 queue와는 다르게 맨 끝에 추가하거나, 맨..
007. dict
·
사소한 아이의 소소한 스킬/Python
딕셔너리 메서드 메서드 설명 setdefault(키, 기본값) 딕셔너리에 키-값 쌍을 추가, 키만 지정하면 값에 None을 저장 update(키=값) update(딕셔너리) update(리스트) update(튜플) update(반복가능한객체) 딕셔너리에서 키의 값을 수정, 딕셔너리에 키가 없으면 키-값 쌍을 추가 pop(키) pop(키, 기본값) 딕셔너리에서 특정 키-값 쌍을 삭제한 뒤 값을 반환, del 딕셔너리[키]와 같음 기본값을 지정하면 키가 없을 때 기본 값을 반환 popitem() 딕셔너리에서 임의의 키-값 쌍을 삭제하고 해당 키-값 쌍을 튜플로 반환 clear() 딕셔너리의 모든 키-값 쌍을 삭제 get(키) get(키, 기본값) 딕셔너리에서 특정 키의 값을 가져옴 기본값을 지정하면 키가 없..
006. list, tuple
·
사소한 아이의 소소한 스킬/Python
메서드 설명 append(값) append(리스트) 리스트 끝에 값을 추가, 리스트[len(리스트):] = [값]과 같음 리스트를 넣으면 리스트 안에 리스트가 들어감 extend(리스트) 리스트 끝에 다른 리스트 연결, 리스트[len(리스트):] = [값, 값]과 같음 insert(인덱스, 값) 리스트의 특정 인덱스에 값을 추가 pop() pop(인덱스) 리스트의 마지막 값을 삭제한 뒤 삭제한 값을 반환 인덱스를 지정하면 해당 인덱스의 값을 삭제한 뒤 삭제한 값을 반환, del 리스트[인덱스]와 같음 remove(값) 리스트에서 특정 값을 삭제 index(값) 리스트에서 특정 값의 인덱스를 구함 count(값) 리스트에서 특정 값의 개수를 구함 reverse() 리스트에서 값의 순서를 반대로 뒤집음 so..
005. datetime
·
사소한 아이의 소소한 스킬/Python
c#에서 자주 쓰던 datetime.. python도 당연히 지원하고 있다.. 하지만 역시나 사용하는 방법은 다르지.. 사용하는 방법은 아래와 같다. from datetime import datetime datetime.now() datetime(2020, 7, 18, 13, 26, 23) datetime.datetime(2020, 7, 18, 13, 26, 23) 상단에 datetime import 후 datetime(년, 월, 일, 시, 분, 초) 출력의 경우 datetime.now().tostring("yyyy/MM/dd HH:mm:ss.fff) 였던것을.. 포맷 코드 설명 예 %a 요일을 짧게 표시합니다. Sun %A 요일을 길게 표시합니다. Sunday %w 요일을 숫자로 표시합니다. 일요일을 ..
004. 문자열
·
사소한 아이의 소소한 스킬/Python
문자열을 건드려보자.. 개발을 하면서 문자열을 정말 질리도록 쓴다.. 물론 int변수로도 처리할수있지만.. 문자열 변수야... 지난번 포스팅에서 말했고... 기초적인거부터 하나하나.. 작성.. lang = 'python' print(lang[0], lang[3]) # p h 위와같이 문자열 지정 후 인덱스를 지정하여 원하는 문구만 가져올수있다. (하지만 값 변경은 불가) license_plate = "12가 3456" print(license_plate[-4:]) # 3456 파이썬은 리스트구조에서 : 구문을 이용하여 참 여러가지 슬라이싱이 가능하다. : 문구를 기준으로 앞은 앞에서 몇번째부터 가져올것인지, 뒤는 뒤에서 length 정보 이다. -가 들어간다면 역방향을 나타내는 것. 그리하여 위 구분은 ..
003. 변수 선언
·
사소한 아이의 소소한 스킬/Python
파이썬을 이제 배우는 사람으로써... 굉장히 어색한 문법이다. 변수선언... 기존 C#을 쓰면서는 무조건 변수선언 시 int, string, double, float, bool 등을 지정하여 사용하였으나(var도 잘 안썻음..) python은... 다르다.. 변수선언 자체가 없다.. 그냥 int 변수에 10이라는 값을 넣고자 한다면... A = 10 끝이다... 뭐 이런... 그러다보니 나는 개인적으로는..(아직 적응이안되서라고 생각하는중) 어색하고.. 이게 대체 무슨 타입이지 하는 생각이 너무많이 드는 편.. 만약 다른 타입을 선언한다고 하면... B = "string" C = 223F D = 22D 이렇게 작성하면 끝.. 뒤에 세미클론도 없다.. ( Python은 기본적으로 코드 띄워쓰기로 구문을 비..