from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Color, Ellipse , Line
from random import random
class MyPaintWidget(Widget):
def on_touch_down(self,touch):
color = (random(),random(),random())
with self.canvas:
Color(*color)
self.pck(color)
print '-'*20
self.pck(*color)
d = 30
Ellipse(pos=(touch.x - d /2 , touch.y - d/2) , size = (d,d))
touch.ud['line'] = Line(points=(touch.x , touch.y))
print touch.ud
def pck(self, a =255,b = 255,c = 255):
print "a = " + str(a)
print "b = " + str(b)
print "c = " + str(c)
def on_touch_move(self,touch):
with self.canvas:
touch.ud['line'].points += [touch.x, touch.y]
print touch.ud['line'].points
class MyPaintApp(App):
def build(self):
return MyPaintWidget()
if __name__ == '__main__':
MyPaintApp().run()
2017년 2월 22일 수요일
[python] GUI Tool
C# 의 WPF와 윈폼을 사용해서, 테스트용 프로그램들을 많이 만들었다.
특정 기능이나 시스템을 여러 환경에서 테스트 해야할때, 콘솔에서 작업하는것 보다 훨씬 속도가 빠르기 때문에, 특히 윈폼을 이용한 테스팅 어플리 케이션을 많이 만든다. 그런데,
C#은 굉장히 복잡한 알고리즘이나 분석등의 작업에는 불편한다.
파이썬으로 10분이면 만들꺼, C#으로는 훨씬 시간이 더 많이 걸리는 경우가 많다.
그래서 기능이나 시스템의 내용에 따라 파이썬과 C#을 번갈아 가면서 사용중인데, 파이썬으로도 c#처럼 편하게 GUI를 만들수 있다면 일의 효율이 매우 크게 증가할 거라고 항상 생각해 왔다.
파이썬으로는 GUI 를 TK밖에 안써봐서, 쓸만한 다른 GUI를 찾고있는데 후보는 두개다.
ptQt나 Kivy
Kivy는 안드로이드 모바일폰에서 사용 가능하다고 한다.
pyQt는 디자이너 프로그램이 딸려있다.
항상 C#에서도 디자이너를 사용해 GUI를 만들어와서 pyQt가 더 빠르게 익힐 수 있지 않을까 하는데, 디자인과 모바일까지 지원된다는 점에선 Kivy가 좋은 것 같기도하다. (앞으로 모바일쪽 테스팅 하기 때문에.. )
현재 프로젝트에서 엄청난 수의 알고리즘들을 설꼐하고 테스트 해야되는데, C#으로 하기에는 너무 시간이 많이 걸릴것 같아 어떻게든 파이썬 GUI로 만들고 싶은데 나중을 생각해 Kivy를 공부하고 싶지만, 프로젝트 일정에 따라갈 수 있을지 걱정이다..
(일단 Kivy 를 시작해본다.)
windows10 64bit / anaconda python2.7
conda install -c krisvanneste kivy=1.8.0 로 인스톨
windows10 64bit / anaconda python2.7
conda install -c krisvanneste kivy=1.8.0 로 인스톨
2017년 2월 19일 일요일
[python] Qt4 With Python2.7 and Vertual Enviroment
1. conda update conda
2. conda create -n qtEnv python=2.7 anaconda
3. activate qtEnv
---------------------------------------------------
next, we need to change qtpy 5 -> qtpy4
---------------------------------------------------
4. conda install -c anaconda pyqt=4.11.4
Done! go to visual studio and add python env
2. conda create -n qtEnv python=2.7 anaconda
3. activate qtEnv
---------------------------------------------------
next, we need to change qtpy 5 -> qtpy4
---------------------------------------------------
4. conda install -c anaconda pyqt=4.11.4
Done! go to visual studio and add python env
[c#] Data Split
public void SplitTrain_Test(float[][] data_x , float[] label , double trainSize ) {
int[] idx = new int[label.Length];
Parallel.For( 0 , label.Length , i => {
idx[i] = i;
} );
Random rnd = new Random();
int trainNum = (int)(label.Length *trainSize);
int[] rndIdx = idx.OrderBy(x => rnd.Next()).ToArray();
int[] trainIdx = idx.Take(trainNum).ToArray();
int[] testIdx = idx.Skip(trainNum).ToArray();
}
int[] idx = new int[label.Length];
Parallel.For( 0 , label.Length , i => {
idx[i] = i;
} );
Random rnd = new Random();
int trainNum = (int)(label.Length *trainSize);
int[] rndIdx = idx.OrderBy(x => rnd.Next()).ToArray
int[] trainIdx = idx.Take(trainNum).ToArray();
int[] testIdx = idx.Skip(trainNum).ToArray();
}
[C#] Linq Orderby
orderby 는 각 요소들에서 조건을 뽑아내서 서로 비교한다.
예를들어
orderby(x => x ) : 숫자 요소일시 1 ,2 ,3 순으로 정렬 / 문자시 알파벳순
orderby(x => x%2 ) : 숫자 요소일시 2,4,8 ... 1,3,5 순으로 정렬
여기서 만약 두 요소의 비교조건 값이 같을경우는 정렬이 안된다. 이떄 thenby 쓰면 된다.
예를들어
orderby(x => x ) : 숫자 요소일시 1 ,2 ,3 순으로 정렬 / 문자시 알파벳순
orderby(x => x%2 ) : 숫자 요소일시 2,4,8 ... 1,3,5 순으로 정렬
여기서 만약 두 요소의 비교조건 값이 같을경우는 정렬이 안된다. 이떄 thenby 쓰면 된다.
2017년 2월 6일 월요일
[C#] Closure 쓰는 이점
1. 원하는때 계산이 가능 : Lazy 개념
2. 파라미터를 킵해놓을 수 있기 때문에 병렬처리하는데 관리가 쉬워진다.
3. 파라미터의 보존이 가능해, 파라미터로 사용된 데이터가 바뀌고, 함수는 바뀌기전 파라미터를 사용해야 한다면, Closure 로 쉽게 처리가 가능
Ex)
Func method1( int input ){
return new Func((a,b)=>{
return input + a + b;
});
}
라고 하자.
어떤 시퀀스가
int x = 13;
int y = 0.1;
List> templist = new List>();
for( i => range(0 ,10)){
templist.add( method1(i*x) );
}
z = 0
for( i => range(0 ,10)){
z += templist[i]( y, y*i );
}
별 의미 없는 것이지만, 이런식으로 응용을 할 수 있다.
어떤 일정한 패턴의 계산 값들을 바로 계산하지 않고, 특정 시점에서 계산한다던지..
2. 파라미터를 킵해놓을 수 있기 때문에 병렬처리하는데 관리가 쉬워진다.
3. 파라미터의 보존이 가능해, 파라미터로 사용된 데이터가 바뀌고, 함수는 바뀌기전 파라미터를 사용해야 한다면, Closure 로 쉽게 처리가 가능
Ex)
Func
return new Func
return input + a + b;
});
}
라고 하자.
어떤 시퀀스가
int x = 13;
int y = 0.1;
List
for( i => range(0 ,10)){
templist.add( method1(i*x) );
}
z = 0
for( i => range(0 ,10)){
z += templist[i]( y, y*i );
}
별 의미 없는 것이지만, 이런식으로 응용을 할 수 있다.
어떤 일정한 패턴의 계산 값들을 바로 계산하지 않고, 특정 시점에서 계산한다던지..
[C#] Linq Exampled
var output1 = input.Select(x=>x*10);
var output2 = input.Where( x => x > 20);
var output3 = output1.Aggregate((x,y)=> x+y);
var output3 = output1.Aggregate(100,(x,y)=> x+y); // 첫 요소가 100으로 추가된다.
var output2 = input.Where( x => x > 20);
var output3 = output1.Aggregate((x,y)=> x+y);
var output3 = output1.Aggregate(100,(x,y)=> x+y); // 첫 요소가 100으로 추가된다.
피드 구독하기:
글 (Atom)