#연구/#Kivy

[파이썬/Python] Kivy 로또 번호 생성하는 프로그램 만들기 #Kivy로 만드는 로또 번호 생성기

every7hing 2020. 7. 2. 20:38
반응형

 

[파이썬/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등이 당첨된다면, 얼마나 좋을까요? ㅎㅎ

이번 주에는 생성 번호로 로또나 한번 사봐야겠네요!

 

이런 글은 어때요?

반응형