프로그램 화면 구성은 어렵지 않습니다. 구구단 프로그램을 띄울 창을 만듭니다. 그리고 문제와 정답을 출력할 레이블, 새로운 문제를 출력할 버튼과 정답을 확인할 버튼 4가지 위젯을 만들면 됩니다.
먼저 2개의 레이블은 q_lbl과 a_lbl로 만듭니다. 이때 레이블에서 동적변수를 사용하므로 동적변수를 레이블보다 먼저 만들어야 합니다. StringVar()로 바뀌는 문제를 저장할 동적변수 question과 문제에 따라 바뀌는 정답을 저장할 answer를 만듭니다.
TIP answer를 IntVar()로 정의하면 처음에 자동으로 0을 저장하게 되어 실행한 직후 정답 레이블에 0을 표시합니다. 그래서 동적변수를 StringVar()로 만듭니다.
첫 번째 레이블은 버튼을 클릭할 때마다 문제가 바뀌어야 하므로 textvariable=question으로 동적변수를 설정해 문제를 가져옵니다. 두 번째 레이블도 버튼을 클릭할 때마다 정답이 바뀌어야 하므로 textvariable=answer로 동적변수를 설정해 정답을 가져옵니다. 버튼 2개도 각각 q_btn, a_btn으로 만듭니다. 레이블 크기는 너비 30, 버튼 크기는 너비 10으로 통일했고, 높이는 둘 다 설정하지 않았습니다. root 창의 크기도 설정하지 않았습니다. 창의 크기를 설정하지 않으면 자동으로 위젯 크기에 맞춥니다.
이제 프로그램 기능 부분을 하나씩 구현해 봅시다. [새로운 문제] 버튼을 클릭하면 동적변수 question의 값이 바뀌고, question의 값을 표시하는 q_lbl 레이블에 새로운 문제가 나타나야죠. q_btn을 클릭하면 실행되는 사용자 정의 함수 make_question()을 다음과 같이 만듭니다.
import random
# 무작위로 구구단 문제를 출제하는 함수
def make_question():
num1, num2 = random.randint(2, 9), random.randint(1, 9)
question.set(str(num1) + 'x' + str(num2) + '? ')