我發布了一個較早的問題,從那以后我在我的程式中添加了用戶界面,但我被卡住了。
我想要做的是用單選按鈕“是”和“否”作為答案提出一系列問題,并在其底部提交,但我不知道如何更改某個問題中的布林值
例如:
are you hungry? (radiobutton yes) (radiobutton no)
do you want to order? (radiobutton yes) (radiobutton no)
do you want to cook? (radiobutton yes) (radiobutton no)
(submit)
然后我為每個問題設定了布林值,但我不知道如何將其更改為True“是”答案和“否”答案。這是我程式中的這部分代碼。
from tkinter import *
import random
Are_You_Hungry = False
Do_You_Have_Money_To_Order = False
Do_You_Have_Energy_To_Cook = False
Are_You_In_The_Mood_To_Cook = False
Does_the_Oven_Work = False
Do_You_Want_To_Eat_Warm_Food = False
def Random_dinner_button():
new_window = Tk()
label = Label(new_window,
text="Are You Hungry?: ",
font=("Times New Roman", 10),
padx=10, pady=10)
label.grid(row=0,column=0,columnspan=3,sticky=W)
var = IntVar()
R1 = Radiobutton(new_window,
text="Yes",
variable=var,
value=1,
command=Are_You_Hungry1
)
R1.grid(row=0,column=4)
R2 = Radiobutton(new_window,
text="No",
variable=var,
value=2,
command=Are_You_Hungry1
)
R2.grid(row=0,column=5)
label = Label(new_window,
text="Do You Have Money To Order?: ",
font=("Times New Roman", 10),
padx=10, pady=10)
label.grid(row=1, column=0, columnspan=3,sticky=W)
var = IntVar()
R1 = Radiobutton(new_window,
text="Yes",
variable=var,
value=1,
# command=sel)
)
R1.grid(row=1, column=4)
R2 = Radiobutton(new_window,
text="No",
variable=var,
value=2,
# command=sel)
)
R2.grid(row=1, column=5)
label = Label(new_window,
text="Do You Have Energy To Cook?: ",
font=("Times New Roman", 10),
padx=10, pady=10)
label.grid(row=2, column=0, columnspan=3,sticky=W)
var = IntVar()
R1 = Radiobutton(new_window,
text="Yes",
variable=var,
value=1,
# command=sel)
)
R1.grid(row=2, column=4)
R2 = Radiobutton(new_window,
text="No",
variable=var,
value=2,
# command=sel)
)
R2.grid(row=2, column=5)
label = Label(new_window,
text="Are You In The Mood To Cook?: ",
font=("Times New Roman", 10),
padx=10, pady=10)
label.grid(row=3, column=0, columnspan=3,sticky=W)
var = IntVar()
R1 = Radiobutton(new_window,
text="Yes",
variable=var,
value=1,
# command=sel)
)
R1.grid(row=3, column=4)
R2 = Radiobutton(new_window,
text="No",
variable=var,
value=2,
# command=sel)
)
R2.grid(row=3, column=5)
label = Label(new_window,
text="Does the Oven Work?: ",
font=("Times New Roman", 10),
padx=10, pady=10)
label.grid(row=4, column=0, columnspan=3,sticky=W)
var = IntVar()
R1 = Radiobutton(new_window,
text="Yes",
variable=var,
value=1,
# command=sel)
)
R1.grid(row=4, column=4)
R2 = Radiobutton(new_window,
text="No",
variable=var,
value=2,
# command=sel)
)
R2.grid(row=4, column=5)
label = Label(new_window,
text="Do You Want To Eat Warm Food?: ",
font=("Times New Roman", 10),
padx=10, pady=10)
label.grid(row=5, column=0, columnspan=3,sticky=W)
var = IntVar()
R1 = Radiobutton(new_window,
text="Yes",
variable=var,
value=1,
# command=sel)
)
R1.grid(row=5, column=4)
R2 = Radiobutton(new_window,
text="No",
variable=var,
value=2,
# command=sel)
)
R2.grid(row=5, column=5)
button = Button(new_window,
text="Submit",
font=("Comic Sans", 11, "bold"),
state=ACTIVE)
button.grid(row=6,column=2)
很抱歉重復的代碼,我仍在學習如何編碼和如何管理它。
uj5u.com熱心網友回復:
你可以這樣做(更多解釋在代碼注釋中):有一個字典(不需要用一堆變數名來混淆你的命名空間,字典可以更容易地與其中的所有值進行互動以及它更容易保存到包含問題答案的檔案中,根據字典中的專案在回圈中創建小部件(洗掉重復)并將單選按鈕的值設定為字典中的值(意味著您可以更改默認值)。將包含值的變數與問題一起附加到串列中。有一個按鈕呼叫一個函式,該函式將獲取單選按鈕的當前值并在字典中設定這些值。然后列印字典(然后將包含新值)。
import tkinter as tk
# use a dictionary for easier question and answer management
questions_and_answers = {
'Are you hungry?': False,
'Do you have money to order?': False,
'Do you have energy to cook?': False,
'Are you in the mood to cook?': False,
'Does the oven work?': False,
'Do you want to eat warm food?': False
}
# create a list for storing question text (key to the above dictionary)
# and variable that contains the radiobutton value
user_answers = []
def submit():
# go over the question and variable in the user_answers dictionary
for q, a in user_answers:
# set the question value to the value selected by the user
questions_and_answers[q] = a.get()
# print what the main question and answer dictionary contains
print(questions_and_answers)
root = tk.Tk()
# labels for telling user which row is for what
tk.Label(root, text='Yes').grid(row=0, column=1, sticky='news')
tk.Label(root, text='No').grid(row=0, column=2, sticky='news')
# go over the main question dictionary and start enumerating from one since the
# first row is for the above labels
for row, (question, answer) in enumerate(questions_and_answers.items(), start=1):
# create the label to contain the question
lbl = tk.Label(root, text=question)
# variable for getting selected radiobutton
var = tk.BooleanVar(value=answer)
# radiobuttons to select yes or no
yes = tk.Radiobutton(root, variable=var, value=True)
no = tk.Radiobutton(root, variable=var, value=False)
# append the question and variable to the user_answers list
user_answers.append((question, var))
# place the label and radiobuttons
lbl.grid(row=row, column=0, sticky='news')
yes.grid(row=row, column=1, sticky='news')
no.grid(row=row, column=2, sticky='news')
# create the submit button which when clicked will call the `submit` function
btn = tk.Button(root, text='Submit', command=submit)
# grid the button on the last row and expand it over the 3 columns
btn.grid(row=root.grid_size()[1], column=0, columnspan=3, sticky='news')
root.mainloop()
另外:
我強烈建議*在匯入某些內容時不要使用通配符 ( ),您應該匯入您需要的內容,例如from module import Class1, func_1, var_2等等或匯入整個模塊:import module然后您也可以使用別名:import module as md或類似的東西,重點是不要除非您確實知道自己在做什么,否則不要匯入所有內容;名稱沖突是問題所在。
我強烈建議遵循PEP 8 - Python 代碼風格指南。函式名和變數名應該在snake_case,類名應該在CapitalCase. 沒有足夠的空間周圍=,如果它被用作關鍵字引數的一部分,( func(arg='value')),但周圍有空間,=如果是用于分配的值(variable = 'some value')。在運算子周圍留出空間( -/等value = x y:(此處除外value = x y))。在函式和類宣告周圍有兩個空行。物件方法定義周圍有一個空行。
uj5u.com熱心網友回復:
我建議將問題的文本及其相關答案存盤在字典中,因為這樣可以輕松地將它們作為一個組進行處理,并擺脫問題中的大量重復代碼。我還強烈建議您閱讀并開始遵循PEP 8 - Python 代碼風格指南指南,這將使您的代碼更具可讀性。
這是根據您在問題中的內容這樣做的結果。請注意它變得更短且相對容易閱讀。
mport tkinter as tk
root = tk.Tk()
questions = ("Are You Hungry?",
"Do You Have Money To Order?",
"Do You Have Energy To Cook?",
"Are You In The Mood To Cook?",
"Does the Oven Work?",
"Do You Want To Eat Warm Food?")
answers = {question: tk.BooleanVar(value=False) for question in questions}
def yn_question(win, row, var, text):
label = tk.Label(win, text=text " ", font=("Times New Roman", 10), padx=10, pady=10)
label.grid(row=row, column=0, columnspan=3, sticky="W")
yes_btn = tk.Radiobutton(win, text="Yes", variable=var, value=True)
yes_btn.grid(row=row, column=4)
no_btn = tk.Radiobutton(win, text="No", variable=var, value=False)
no_btn.grid(row=row, column=5)
def submit():
# Show answers,
for question, answer in answers.items():
print(f'{question} {answer.get()}')
def Random_dinner_button(window):
for row, (question, var) in enumerate(answers.items()):
yn_question(window, row, var, question)
button = tk.Button(window, text="Submit", font=("Comic Sans", 11, "bold"),
command=submit)
button.grid(row=6,column=2)
Random_dinner_button(root)
root.mainloop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/390338.html
