[파이썬 완전정복] '*'버튼 입력에 따라 랜덤 숫자 돌리기
오늘은 파이썬 공부를 하고 있는 대학생이
고생을 하고 있다고 하여 도움을 청해
도움을 주고자 글을 씁니다.
tkinter는 파이썬에서 GUI 개발을 할 때 사용합니다.
구글 검색을 해보면 버튼, 콤보, 에디트 박스 등의 GUI를 생성하며,
기본적인 샘플로 계산기가 가장 좋은 예입니다.
저에게 요청한 내용은 다음과 같습니다.
랜덤 배열 키패드를 버튼으로 생성을 하고 '*' 버튼을 누를 때마다
랜덤 배열 키패드의 번호를 임의로 배열시킵니다.
random.shuffle(list)를 사용해서 숫자를 바꾸려도
시도하였으나 바뀌지 않아서 막막하다는 내용이였습니다.
자 그럼 한번 시작해볼까요?
먼저 tkinter와 random 함수를 사용하기 위해서는 아래와 같이 선언을 해줍니다.
# tkinter, random 선언
from tkinter import ttk
import tkinter
import random
그리고 전역으로 숫자를 랜덤으로 생성할 리스트를 초기화합니다.
list = [] #리스트 초기화
이제 GUI를 구성해보겠습니다.
window = tkinter.Tk() # 윈도우 생성
window.title("Random Number Sample") #윈도우 타이틀
window.geometry('320x480') #윈도우 사이즈
윈도우를 생성하고 타이틀과 사이즈까지 설정합니다.
그리고 이제 list에 숫자를 랜덤하게 삽입합니다.
예를 들어, 임의로 1~10의 숫자를 랜덤으로 삽입합니다.
여기서는 중복 허용입니다.
중복 불허용은 조금 생각해보시기 바랍니다.
for i in range(0, 10) : #10개의 랜덤 숫자를 리스트에 삽입
list.insert(i, random.randint(1,10))
#result
#before [1, 1, 2, 4, 9, 5, 6, 1, 8, 8]
#after [1, 8, 6, 4, 2, 1, 5, 1, 8, 9]
result와 같이 리스트에 삽입됩니다.
그럼 이제 버튼을 만드는 코드입니다.
button0 = ttk.Button(window, text=str(list[0]))
button0.grid(row=1, column=0)
button1 = ttk.Button(window, text=str(list[1]))
button1.grid(row=1, column=1)
button2 = ttk.Button(window, text=str(list[2]))
button2.grid(row=2, column=0)
button3 = ttk.Button(window, text=str(list[3]))
button3.grid(row=2, column=1)
button4 = ttk.Button(window, text=str(list[4]))
button4.grid(row=3, column=0)
button5 = ttk.Button(window, text=str(list[5]))
button5.grid(row=3, column=1)
button6 = ttk.Button(window, text=str(list[6]))
button6.grid(row=4, column=0)
button7 = ttk.Button(window, text=str(list[7]))
button7.grid(row=4, column=1)
button8 = ttk.Button(window, text=str(list[8]))
button8.grid(row=5, column=0)
button9 = ttk.Button(window, text=str(list[9]))
button9.grid(row=5, column=1)
button10 = ttk.Button(window, text='#', width=20) #사용하지 않음
button10.grid(row=6, column=0)
button11 = ttk.Button(window, text='*', command=lambda:pressedButton('*'))
button11.grid(row=6, column=1)
버튼 역시 리스트로 만들게 되면 편하게 관리할 수 있습니다.
예제 코드이기 때문에 리스트보다는 쉽게 만들었습니다.
list화 하면 5줄로 줄일 수 있으니 공부하시기 바랍니다.
그리고 버튼을 눌렀을 때 이벤트를 위한
버튼 함수를 정의합니다.
#def 바튼을 누를 때
def pressedButton(value) :
print(value, "pressed")
print("before", list)
random.shuffle(list)
print("after", list)
button0['text'] = list[0]
button1['text'] = list[1]
button2['text'] = list[2]
button3['text'] = list[3]
button4['text'] = list[4]
button5['text'] = list[5]
button6['text'] = list[6]
button7['text'] = list[7]
button8['text'] = list[8]
button9['text'] = list[9]
함수 정의까지 끝났으면 이제 완료입니다.
그럼 결과물을 보겠습니다.



# Full Source code
# Random Number by '*' button
# 랜덤 배열 키패드를 만들어 보려고 하는데 *버튼을 누를때 마다
# 배열 버튼의 숫자들을 다시 랜램으로 배열시키고 싶어서 random.shuffle(list)를 썼는데
# 숫자가 바뀌지 않고 계속 그대로여서 막막합니다..
# 어떻게 하면 *버튼에 랜덤명령을 할수 있을까요?
from tkinter import ttk
import tkinter
import random
list =[] #리스트 초기화
#def 바튼을 누를 때
def pressedButton(value) :
print(value, "pressed")
print("before", list)
random.shuffle(list)
print("after", list)
button0['text'] = list[0]
button1['text'] = list[1]
button2['text'] = list[2]
button3['text'] = list[3]
button4['text'] = list[4]
button5['text'] = list[5]
button6['text'] = list[6]
button7['text'] = list[7]
button8['text'] = list[8]
button9['text'] = list[9]
window = tkinter.Tk() # 윈도우 생성
window.title("Random Number Sample") #윈도우 타이틀
window.geometry('320x480') #윈도우 사이즈
for i in range(0, 10) : #10개의 랜덤 숫자를 리스트에 삽입
list.insert(i, random.randint(1,10))
button0 = ttk.Button(window, text=str(list[0]))
button0.grid(row=1, column=0)
button1 = ttk.Button(window, text=str(list[1]))
button1.grid(row=1, column=1)
button2 = ttk.Button(window, text=str(list[2]))
button2.grid(row=2, column=0)
button3 = ttk.Button(window, text=str(list[3]))
button3.grid(row=2, column=1)
button4 = ttk.Button(window, text=str(list[4]))
button4.grid(row=3, column=0)
button5 = ttk.Button(window, text=str(list[5]))
button5.grid(row=3, column=1)
button6 = ttk.Button(window, text=str(list[6]))
button6.grid(row=4, column=0)
button7 = ttk.Button(window, text=str(list[7]))
button7.grid(row=4, column=1)
button8 = ttk.Button(window, text=str(list[8]))
button8.grid(row=5, column=0)
button9 = ttk.Button(window, text=str(list[9]))
button9.grid(row=5, column=1)
button10 = ttk.Button(window, text='#', width=20) #사용하지 않음
button10.grid(row=6, column=0)
button11 = ttk.Button(window, text='*', command=lambda:pressedButton('*'))
button11.grid(row=6, column=1)
window.mainloop()