-
Python만으로 어플을 만들어보자 #5 (A SimplePaint App #2)Programing/python 어플 개발 2022. 4. 20. 02:13반응형
Python으로 어플 만들기 5탄
: 그림판 어플을 만들어보자 2탄
지난 시간엔 터치하고 드래그할 때 노란선이 그려지는 간단한 그림판 어플리케이션을 만들어보았습니다.
하지만 아직 그림판이라고 하기에는 부족한 점이 많습니다. 무엇보다 예쁘지 않죠!
이번에는 새로 터치할 때마다 색깔이 바뀌는 그림판을 만들어봅시다.
4. Adding Behaviour (touch -> new color)
from random import random from kivy.app import App from kivy.uix.widget import Widget from kivy.graphics import Color, Ellipse, Line class MyPaintWidget(Widget): def on_touch_down(self, touch): color = (random(), random(), random()) #1 with self.canvas: Color(*color) #2 d = 30. Ellipse(pos=(touch.x - d / 2, touch.y - d / 2), size=(d, d)) touch.ud['line'] = Line(points=(touch.x, touch.y)) def on_touch_move(self, touch): touch.ud['line'].points += [touch.x, touch.y] class MyPaintApp(App): def build(self): return MyPaintWidget() if __name__ == '__main__': MyPaintApp().run()
이번에는 더욱 간단합니다.
color
를random()
을 통해 정의해주고,Color(1,1,0)
이Color(*color)
가 되었을 뿐입니다!- 원래
Color(1,1,0)
이였는데,random()
을 이용해서 무작위 RGB가 되도록color
를 정의해 주었습니다.
color = (random(), random(), random()) #1
- 그리고 위에서 정의한
color
를Color()
에 넣어줍니다.
Color(*color) #2
color
가 아닌,*color
인 이유는color
는 개별 값n1,n2,n3
가 아니라, 하나의 객체(n1,n2,n3)
이기 때문입니다.
그리고 실행해보면
위의 사진과 같이 클릭할 때마다 랜덤한 색깔이 지정되는 조금 더 예쁜 그림판이 되었습니다!5. Bonus Points (new widget: clear button)
아직 아쉬운 점은 많지만, 그 중 가장 아쉬운 점이라면 새로 그림을 그리고 싶을 땐 아예 어플을 나가야한다는 점이죠!
그래서 간단하게 버튼한번 누르면 기존의 그림을 지우고 새로 그림을 그릴 수 있게 해보겠습니다.from random import random from kivy.app import App from kivy.uix.widget import Widget from kivy.uix.button import Button from kivy.graphics import Color, Ellipse, Line class MyPaintWidget(Widget): def on_touch_down(self, touch): color = (random(), 1, 1) with self.canvas: Color(*color, mode='hsv') d = 30. Ellipse(pos=(touch.x - d / 2, touch.y - d / 2), size=(d, d)) touch.ud['line'] = Line(points=(touch.x, touch.y)) def on_touch_move(self, touch): touch.ud['line'].points += [touch.x, touch.y] class MyPaintApp(App): def build(self): parent = Widget() self.painter = MyPaintWidget() clearbtn = Button(text='Clear') clearbtn.bind(on_release=self.clear_canvas) parent.add_widget(self.painter) parent.add_widget(clearbtn) return parent def clear_canvas(self, obj): self.painter.canvas.clear() if __name__ == '__main__': MyPaintApp().run()
이번엔
MyPaintApp
클래스에 많은 코드가 추가되었습니다. 하지만 한줄한줄 읽어보면 그렇게 어려운 내용은 아닙니다.핵심은 여기입니다.
parent = Widget()
비록 저 코드 한줄로는
parant
라는 더미 객체를 만들었을 뿐이지만,
위에서 만들었던MyPaintWidget
과, 새로 만들어준clearbtn
위젯을 한데 묶어주는 역할을 할 것이기 때문이죠.clearbtn = Button(text='Clear') # 버튼위젯을 생성해줍니다. 버튼 안에 'clear'라고 적어줍니다. clearbtn.bind(on_release=self.clear_canvas) # 버튼을 눌렀다 뗄 때 self.clear_canvas 함수를 실행합니다. parent.add_widget(self.painter) parent.add_widget(clearbtn)
그리고 실행시켜 보겠습니다.
짠! 좀더 기능이 다양해진 그림판 어플리케이션이 완성되었습니다!
반응형'Programing > python 어플 개발' 카테고리의 다른 글
Python만으로 어플을 만들어보자 #7 (buildozer error shooting) (0) 2022.04.23 Python만으로 어플을 만들어보자 #6 (Create a package for Android) (1) 2022.04.21 Python만으로 어플을 만들어보자 #4 (A SimplePaint App #1) (0) 2022.04.19 Python만으로 어플을 만들어보자 #3 (create an application) (0) 2022.04.17 Python만으로 어플을 만들어보자 #2 (installing kivy) (2) 2022.04.17 - 원래