[파이썬/Python] Kivy를 사용해서 Python GUI 프로그래밍을 시작해보 5
#Kivy 로또 번호 생성하는 프로그램 만들기 #Kivy로 만드는 로또 번호 생성기
#로또 번호 생성하는 프로그램 만들기
#로또 번호 생성기
#로또 번호 생성기 만들기
지난 포스팅까지 진행했던 내용을 토대로, 로또 번호를 랜덤으로 생성하는 프로그램을 만들어보겠습니다.
일단 화면 구성은 6개의 번호가 보여질 수 있는 Label 6개와 생성 / 초기화 버튼 각 1개씩 이렇게 구성합니다.
lotto.kv
<RootLayout>:
lbl_num01:lbl_num01
lbl_num02:lbl_num02
lbl_num03:lbl_num03
lbl_num04:lbl_num04
lbl_num05:lbl_num05
lbl_num06:lbl_num06
canvas.before:
Color:
rgba: 0, 0, 0, 1
Rectangle:
pos: self.pos
size: self.size
BoxLayout:
orientation: 'horizontal'
spacing: 10
padding: 10
Label:
id: lbl_num01
font_size: '25sp'
text: ''
color: 3, 13, 194, 0.84
size_hint: 1, 0.2
pos_hint: {'center_y': 0.7}
canvas.before:
Color:
rgba: 146, 146, 144, 0.49
Rectangle:
pos: self.pos
size: self.size
Label:
id: lbl_num02
font_size: '25sp'
text: ''
color: 3, 13, 194, 0.84
size_hint: 1, 0.2
pos_hint: {'center_y': 0.7}
canvas.before:
Color:
rgba: 146, 146, 144, 0.49
Rectangle:
pos: self.pos
size: self.size
Label:
id: lbl_num03
font_size: '25sp'
text: ''
color: 3, 13, 194, 0.84
size_hint: 1, 0.2
pos_hint: {'center_y': 0.7}
canvas.before:
Color:
rgba: 146, 146, 144, 0.49
Rectangle:
pos: self.pos
size: self.size
Label:
id: lbl_num04
font_size: '25sp'
text: ''
color: 3, 13, 194, 0.84
size_hint: 1, 0.2
pos_hint: {'center_y': 0.7}
canvas.before:
Color:
rgba: 146, 146, 144, 0.49
Rectangle:
pos: self.pos
size: self.size
Label:
id: lbl_num05
font_size: '25sp'
text: ''
color: 3, 13, 194, 0.84
size_hint: 1, 0.2
pos_hint: {'center_y': 0.7}
canvas.before:
Color:
rgba: 146, 146, 144, 0.49
Rectangle:
pos: self.pos
size: self.size
Label:
id: lbl_num06
font_size: '25sp'
text: ''
color: 3, 13, 194, 0.84
size_hint: 1, 0.2
pos_hint: {'center_y': 0.7}
canvas.before:
Color:
rgba: 146, 146, 144, 0.49
Rectangle:
pos: self.pos
size: self.size
BoxLayout:
orientation: 'horizontal'
spacing: 10
padding: 10
Button:
text: 'Generate Number'
font_size: '20sp'
size_hint: 0.5, 0.1
pos_hint: {'center_y': 0.1}
on_press: root.button01_clicked()
Button:
text: 'Reset Number'
font_size: '20sp'
size_hint: 0.5, 0.1
pos_hint: {'center_y': 0.1}
on_press: root.button02_clicked()
그리고 이 후에는, Lotto Class를 만들어서 Lotto 번호를 생성하는 파이썬 코드를 작성합니다.
저는 좀 더 랜덤한 수 생성을 위해, secrets.SystemRandom 함수를 사용했습니다.
Lotto Class
class Lotto:
def __init__(self):
self.number_list = list(range(1, 45))
self.lotto_num = SystemRandom().sample(self.number_list, 6)
def get_number_1(self):
return str(self.lotto_num[0])
def get_number_2(self):
return str(self.lotto_num[1])
def get_number_3(self):
return str(self.lotto_num[2])
def get_number_4(self):
return str(self.lotto_num[3])
def get_number_5(self):
return str(self.lotto_num[4])
def get_number_6(self):
return str(self.lotto_num[5])
RootLayout Class에는 번호 생성 / 번호 초기화 버튼을 클릭했을 때 Event handling을 아래와 같이 구성했습니다.
RootLayout Class
class RootLayout(FloatLayout):
def __init__(self, **kwargs):
super(RootLayout, self).__init__(**kwargs)
self.lotto = Lotto()
def button01_clicked(self):
self.lbl_num01.text = self.lotto.get_number_1()
self.lbl_num02.text = self.lotto.get_number_2()
self.lbl_num03.text = self.lotto.get_number_3()
self.lbl_num04.text = self.lotto.get_number_4()
self.lbl_num05.text = self.lotto.get_number_5()
self.lbl_num06.text = self.lotto.get_number_6()
def button02_clicked(self):
self.lotto = Lotto()
self.lbl_num01.text = ''
self.lbl_num02.text = ''
self.lbl_num03.text = ''
self.lbl_num04.text = ''
self.lbl_num05.text = ''
self.lbl_num06.text = ''
최종본으로 만들어진 Python 코드는 아래와 같습니다.
main.py
# -*- coding:utf-8 -*-
from os.path import dirname
from os.path import join
from secrets import SystemRandom
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
kv_file = 'lotto.kv'
Builder.load_file(join(dirname(__file__), kv_file))
class RootLayout(FloatLayout):
def __init__(self, **kwargs):
super(RootLayout, self).__init__(**kwargs)
self.lotto = Lotto()
def button01_clicked(self):
self.lbl_num01.text = self.lotto.get_number_1()
self.lbl_num02.text = self.lotto.get_number_2()
self.lbl_num03.text = self.lotto.get_number_3()
self.lbl_num04.text = self.lotto.get_number_4()
self.lbl_num05.text = self.lotto.get_number_5()
self.lbl_num06.text = self.lotto.get_number_6()
def button02_clicked(self):
self.lotto = Lotto()
self.lbl_num01.text = ''
self.lbl_num02.text = ''
self.lbl_num03.text = ''
self.lbl_num04.text = ''
self.lbl_num05.text = ''
self.lbl_num06.text = ''
class MainApp(App):
def build(self):
return RootLayout()
class Lotto:
def __init__(self):
self.number_list = list(range(1, 45))
self.lotto_num = SystemRandom().sample(self.number_list, 6)
def get_number_1(self):
return str(self.lotto_num[0])
def get_number_2(self):
return str(self.lotto_num[1])
def get_number_3(self):
return str(self.lotto_num[2])
def get_number_4(self):
return str(self.lotto_num[3])
def get_number_5(self):
return str(self.lotto_num[4])
def get_number_6(self):
return str(self.lotto_num[5])
def main():
MainApp().run()
if __name__ == "__main__":
main()
자 이제 완성이 되었으니,
실행을 해볼까요?
최초 실행된 모습입니다.
이 상태에서 Generate Number 버튼을 클릭하게 되면, 아래와 같이 Random한 숫자 6개가 생성되어 각 Label에 하나씩 나타나게 됩니다.
그리고, 다시 Reset Number를 클릭하게 되면 각 Label의 숫자는 없어지게 됩니다.
그리고 다시, Generate Number 버튼을 클릭하면 다시 생성된 새로운 랜덤한 숫자가 보이게 되죠.
자, 어떤가요?
간단하게 로또 생성기를 만들어보았습니다.
이렇게 생성된 로또 번호로 1등이 당첨된다면, 얼마나 좋을까요? ㅎㅎ
이번 주에는 생성 번호로 로또나 한번 사봐야겠네요!
이런 글은 어때요?
'#연구 > #Kivy' 카테고리의 다른 글
[파이썬/Python] Kivy 안드로이드 앱 APK Release로 생성하기 (feat. buildozer) (4) | 2020.07.04 |
---|---|
[파이썬/Python] Kivy 안드로이드 앱 APK Debug로 생성하기 (feat. buildozer) (5) | 2020.07.02 |
[파이썬/Python] Kivy 버튼 생성 및 클릭 시 이벤트 핸들링 처리하기 (0) | 2020.06.29 |
[파이썬/Python] Kivy Kv Design Language 구역 나누기 #Layout 설정하기 #색상 변경하기 (0) | 2020.06.28 |
[파이썬/Python] Kivy 디자인 언어를 이용한 Python GUI 프로그래밍 (feat. Kivy Design Language) (0) | 2020.06.26 |