изменение кнопки переключателя Python Tkinter с помощью кнопки - PullRequest
0 голосов
/ 28 марта 2019

как использовать кнопку изменения функции радиобутона в ткинтере? Нажмите кнопку и затем измените текстовое значение Radiobuttons. Это игра в вопросы и ответы. Банк вопросов хранится в sqlite3, нажмите кнопку «Далее», радиокнопки получают новые ответы, а метка - новый вопрос.

import sqlite3
import tkinter as tk
import tkinter.messagebox
window=tk.Tk()
window.title('Python Qusz game')
window.geometry('400x400')
v=tk.StringVar()
v.set(1)
score=0
num=0
conn = sqlite3.connect('test.db')
c=conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS COMPANY 
       (QUESTION      TEXT     NOT NULL,
       ANSWER_A       TEXT     NOT NULL,
       ANSWER_B       TEXT     NOT NULL,
       ANSWER_C       TEXT,
       ANSWER_D       TEXT,
       RIGHT_ANSWER   TEXT);''')
c = conn.cursor()

c.execute("INSERT INTO COMPANY (QUESTION,ANSWER_A,ANSWER_B,ANSWER_C,ANSWER_D,RIGHT_ANSWER) \
      VALUES ('qus_1','ans_1','ans_2','ans_3','ans_4','right_ans1')")
c.execute("INSERT INTO COMPANY (QUESTION,ANSWER_A,ANSWER_B,ANSWER_C,ANSWER_D,RIGHT_ANSWER) \
      VALUES ('qus_2','ans_1','ans_2','ans_3','ans_4','right_ans2')")
c.execute("INSERT INTO COMPANY (QUESTION,ANSWER_A,ANSWER_B,ANSWER_C,ANSWER_D,RIGHT_ANSWER) \
      VALUES ('qus_3','ans_1','ans_2','ans_3','ans_4','right_ans3')")
c.execute("INSERT INTO COMPANY (QUESTION,ANSWER_A,ANSWER_B,ANSWER_C,ANSWER_D,RIGHT_ANSWER) \
      VALUES ('qus_4','ans_1','ans_2','ans_3','ans_4','right_ans4')")


cursor=c.execute("select QUESTION, ANSWER_A, ANSWER_B, ANSWER_C, ANSWER_D, RIGHT_ANSWER from COMPANY")
value=cursor.fetchall()

var=tk.StringVar()
var.set(value[0][0])
l1=tk.Label(window,textvariable=var)
l1.pack()

def next_and_judge():
   global score
   global num
   r1 = tk.Radiobutton(window, text=value[num][num+1], variable=v, value=1)
   r1.pack()
   r2 = tk.Radiobutton(window, text=value[num][num+2], variable=v, value=2)
   r2.pack()
   r3 = tk.Radiobutton(window, text=value[num][num+3], variable=v, value=3)
   r3.pack()
   r4 = tk.Radiobutton(window, text=value[num][num+4], variable=v, value=4)
   r4.pack()
   num=num+1
   if var.get()==value[num-1][5]:
        score=10+score

b1=tk.Button(window,text='next',command=next_and_judge)
b1.pack()

def sum():
    tkinter.messagebox.showinfo(title='END',message=str(score))

b2=tk.Button(window,text='finish')
b2.pack()


conn.commit()
print('operation done successfully')
conn.close()
window.mainloop()

используйте sqlite3

1 Ответ

0 голосов
/ 28 марта 2019

Вместо создания радиокнопок при каждом нажатии next, вы можете просто изменить значение text этих кнопок, чтобы отобразить новые ответы.

Вот один из способов сделать это.Этот код создаст радиокнопки с ответами на первый вопрос при нажатии start и продолжит обновлять вопросы и ответы при нажатии next:

var=tk.StringVar()
var.set('Click start')
l1=tk.Label(window,textvariable=var)
l1.pack()
radio_buttons = []

def show_first(radio_buttons, b1):
    global num, radio_buttons, var
    for idx in range(1, 5):
        radio_buttons.append(tk.Radiobutton(window, text=value[num][num+idx], variable=v, value=idx))
        radio_buttons[-1].pack()
    var.set(value[0][0])
    b1.config(text='next', command=lambda: next_and_judge(radio_buttons))

def next_and_judge(radio_buttons):
    global num, score, value, var
    if var.get()==value[num][5]:
        score+=10
    num=num+1
    for idx in range(1, 5):
        radio_buttons[idx-1].config(text=value[num][num+idx])
    var.set(value[num][num])

b1=tk.Button(window,text='start')
b1.config(command=lambda: show_first(radio_buttons,b1))
b1.pack()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...