我无法首先将问题显示为文本框,而输入框则可以回答问题。按下发送按钮。然后在发送答案后弹出下一个文本框作为对输入框的响应。然后给他们另一个输入框来输入答案,用一个按钮发送答案,然后再给他们一个文本框作为答案。我是否需要使用文本框,输入框和按钮以外的其他内容。我是如此擅长使用tkinter,让我感到困惑的是如何按照自己的意愿去做。到目前为止,这是我的代码。
from tkinter import *
root = Tk()
frame = Frame(root, bg='lightgray')
frame.pack(fill='both', expand='yes')
root.title("Uganda Project")
#This is the first Question
T1= Text(frame, height=3, width=37)
T1.pack()
T1.insert(END, "Did you take your medicine?\n 1= Yes\n 2= No\n")
T1.configure(fg='white', bg='blue')
#Make an entry box to answer the question in
e1 = Entry(master=frame, fg='black', bg='lightgray', width=37)
e1.pack()
def answer1():
""" What to do with the answer in the entry box"""
answer1 = e1.get()
return answer1
#Make a Send button to send the answer from the entry box to the definition
of answer1
send = Button(frame, text="Send", command=answer1)
send.pack()
#This is the second question
if answer1==1:
T2 = Text(frame, height=1, width=37)
T2.pack()
T2.insert(END, "Good Job! Text 0 to end conversation")
T2.configure(fg='white', bg='blue')
elif answer1==2:
T2 = Text(frame, height=3, width=37)
T2.pack()
T2.insert(END, "1= Did you forget?\n2= Did you run out of medicine?\n3=
Did it have bad side effects?\n")
T2.configure(fg='white', bg='blue')
else:
T2 = Text(frame, height=3, width=37)
T2.pack()
T2.insert(END, "I did not understand your response.")
T2.configure(fg='white', bg='blue')
#Make an entry box to answer the question in
e2 = Entry(master=frame, fg='black', bg='lightgray', width=37)
e2.pack()
def answer2():
""" What to do with the answer in the entry box"""
answer2 = e2.get()
return answer2
#Make a Send button to send the answer from the entry box to the definition
of answer2
send = Button(frame, text="Send", command=answer2)
send.pack()
#This is the response to the second entry box
if answer2==0:
T3 = Text(frame, height=1, width=37)
T3.pack()
T3.insert(END, "Have a good day.")
T3.configure(fg='white', bg='blue')
elif answer2==1:
T3 = Text(frame, height=2, width=37)
T3.pack()
T3.insert(END, "Take it as your earliest convience.\nDo Not Take two
doses at once!\n")
T3.configure(fg='white', bg='blue')
elif answer2==2:
T3 = Text(frame, height=2, width=37)
T3.pack()
T3.insert(END, "Please contact your doctor or\npharmacy for refills.\n")
T3.configure(fg='white', bg='blue')
elif answer2==3:
T3 = Text(frame, height=3, width=37)
T3.pack()
T3.insert(END, "Please contact your doctor about\nchanging your
medications or\ndealing with your symptoms.\n")
T3.configure(fg='white', bg='blue')
else:
T3 = Text(frame, height=3, width=37)
T3.pack()
T3.insert(END, "I did not understand your response.")
T3.configure(fg='white', bg='blue')
root.mainloop()
答案 0 :(得分:0)
请尝试此代码(我已经更改了一些内容以及添加其他内容以帮助完成此项工作)。它不是最有效或最好的结构化代码,但它完成了工作(至少对我来说):
from tkinter import *
import datetime
root = Tk ()
root.bind ("<Return>", lambda event: answer1 ())
f = Frame(root, bg='lightgray')
f.grid (sticky = "nsew")
Grid.columnconfigure (root, 0, weight = 1)
Grid.rowconfigure (root, 0, weight = 1)
root.title("Uganda Project")
#This is the first Question
Bar = Scrollbar (f)
T = Listbox (f, fg='white', bg='blue', yscrollcommand = Bar.set, width = 50, height = 20)
Bar.config (command = T.yview)
T.grid (row = 0, column = 0, columnspan = 2, sticky = "nsew")
Bar.grid (row = 0, column = 2, sticky = "ns")
Grid.columnconfigure (f, 0, weight = 1)
Grid.rowconfigure (f, 0, weight = 1)
T.insert (END, "Support:")
T.insert (END, " Did you take your medicine?")
T.insert (END, " 1= Yes")
T.insert (END, " 2= No")
#Make an entry box to answer the question in
e = Entry(f, fg='black', bg='lightgray')
e.focus_force ()
e.grid (row = 1, column = 0, sticky = "ew")
def answer1():
""" What to do with the answer in the entry box"""
answer1 = e.get()
T.insert (END, "You: " + answer1)
e.delete (0, END)
if answer1=="1":
T.insert (END, "Support:")
T.insert (END, " Good Job! Text 0 to end conversation")
send.config (command = answer2)
root.bind ("<Return>", lambda event: answer2 ())
elif answer1=="2":
T.insert (END, "Support:")
T.insert (END, " 1= Did you forget?")
T.insert (END, " 2= Did you run out of medicine?")
T.insert (END, " 3= Did it have bad side effects?")
send.config (command = answer2)
root.bind ("<Return>", lambda event: answer2 ())
else:
T.insert (END, "Support:")
T.insert (END, " I did not understand your response.")
return answer1
#Make a Send button to send the answer from the entry box to the definition of answer1
send = Button(f, text="Send", command=answer1)
send.grid(row = 1, column = 1, columnspan = 2)
#This is the second question
#Make an entry box to answer the question in
def save ():
with open ("Log - %s.txt" % str (datetime.datetime.now ()).replace (":", "."), "w") as f: f.write ("\n".join (T.get (0, END)))
def answer2():
""" What to do with the answer in the entry box"""
answer2 = e.get()
T.insert (END, "You: " + answer2)
e.delete (0, END)
#This is the response to the second entry box
if answer2=="0":
T.insert (END, "Support:")
T.insert (END, " Have a good day.")
send.config (text = "OK", command = root.destroy)
root.bind ("<Return>", lambda event: root.destroy ())
save ()
e.pack_forget ()
elif answer2=="1":
T.insert (END, "Support:")
T.insert (END, " Take it as your earliest convience.")
T.insert (END, " Do Not Take two doses at once!")
root.bind ("<Return>", lambda event: root.destroy ())
send.config (text = "OK", command = root.destroy)
save ()
e.pack_forget ()
elif answer2=="2":
T.insert (END, "Support:")
T.insert (END, " Please contact your doctor or")
T.insert (END, " pharmacy for refills.\n")
root.bind ("<Return>", lambda event: root.destroy ())
send.config (text = "OK", command = root.destroy)
save ()
e.pack_forget ()
elif answer2=="3":
T.insert (END, "Support:")
T.insert (END, " Please contact your doctor about")
T.insert (END, " changing your medications or")
T.insert (END, " dealing with your symptoms.")
root.bind ("<Return>", lambda event: root.destroy ())
send.config (text = "OK", command = root.destroy)
save ()
e.pack_forget ()
else:
T.insert (END, "Support:")
T.insert (END, " I did not understand your response.")
return answer2
root.mainloop ()
#Make a Send button to send the answer from the entry box to the definition of answer1
send = Button(f, text="Send", command=answer1)
send.grid(row = 1, column = 1, columnspan = 2)
#This is the second question
#Make an entry box to answer the question in
def answer2():
""" What to do with the answer in the entry box"""
answer2 = e.get()
T.insert (END, "You: " + answer2)
e.delete (0, END)
#This is the response to the second entry box
if answer2=="0":
T.insert (END, "Support:")
T.insert (END, " Have a good day.")
send.config (text = "OK", command = root.destroy)
root.bind ("<Return>", lambda event: root.destroy ())
e.pack_forget ()
elif answer2=="1":
T.insert (END, "Support:")
T.insert (END, " Take it as your earliest convience.")
T.insert (END, " Do Not Take two doses at once!")
root.bind ("<Return>", lambda event: root.destroy ())
send.config (text = "OK", command = root.destroy)
e.pack_forget ()
elif answer2=="2":
T.insert (END, "Support:")
T.insert (END, " Please contact your doctor or")
T.insert (END, " pharmacy for refills.\n")
root.bind ("<Return>", lambda event: root.destroy ())
send.config (text = "OK", command = root.destroy)
e.pack_forget ()
elif answer2=="3":
T.insert (END, "Support:")
T.insert (END, " Please contact your doctor about")
T.insert (END, " changing your medications or")
T.insert (END, " dealing with your symptoms.")
root.bind ("<Return>", lambda event: root.destroy ())
send.config (text = "OK", command = root.destroy)
e.pack_forget ()
else:
T.insert (END, "Support:")
T.insert (END, " I did not understand your response.")
return answer2
root.mainloop()
下面是一个假设如何调用不同项目的示例:
1)项目与调用代码
位于同一目录中 2)项目以其功能命名(分别为Uganda Project
)
我还创建了一个Rwanda Project
,以展示如何添加除Uganda Project
以外的额外项目。
from tkinter import *
import importlib, threading, time, logging
PROJECTS = ("Uganda Project", "Rwanda Project")
def constructWindow ():
global root, close
close, wait = False, False
logging.basicConfig (format = "%(message)s")
while True:
root = Tk ()
root.title ("Main Menu")
Label (root, text = "Which project would you like to run?").grid ()
for project in PROJECTS: Button (root, text = project, command = lambda project = project: callProject (project)).grid ()
root.protocol ("WM_DELETE_WINDOW", closeWindow)
root.mainloop ()
while wait: time.sleep (0.1)
if close: break
def callProject (project):
global wait
wait = True
root.destroy ()
try: importlib.import_module (project)
except ImportError: logging.warn ("Cannot find project.")
wait = False
def closeWindow ():
global close
close = True
root.destroy ()
if __name__ == "__main__": constructWindow ()
答案 1 :(得分:0)
使用以前的界面再添加一个代码:
import tkinter as tk
root = tk.Tk()
root.title("Uganda Project")
frame = tk.Frame(root, bg='lightgray')
frame.pack(fill='both', expand='yes')
def answer1():
""" What to do with the answer in the entry box"""
# This is the second question
if e1.get () == str (1):
T2.replace (1.0, tk.END, "Good Job! Text 0 to end conversation")
elif e1.get () == str (2):
T2.replace (1.0, tk.END, "1= Did you forget?\n"
"2= Did you run out of medicine?\n"
"3= Did it have bad side effects?\n")
def answer2():
""" What to do with the answer in the entry box"""
#This is the response to the second entry box
if e2.get()==str(0):
T3.replace (1.0, tk.END, "Have a good day.")
elif e2.get()==str(1):
T3.replace (1.0, tk.END, "Take it as your earliest convience.\n"
"Do Not Take two doses at once!\n")
elif e2.get()==str(2):
T3.replace (1.0, tk.END, "Please contact your doctor or\n"
"pharmacy for refills.\n")
elif e2.get()==str(3):
T3.replace (1.0, tk.END, "Please contact your doctor about\n"
"changing your medications or\n"
"dealing with your symptoms.\n")
#This is the first Question
T1= tk.Text(frame, height=3, width=37)
T1.pack()
T1.insert(tk.END, "Did you take your medicine?\n 1= Yes\n 2= No\n")
T1.configure(fg='white', bg='blue')
#Make an entry box to answer the question in
e1 = tk.Entry(master=frame, fg='black', bg='lightgray', width=37)
e1.pack()
#Make a Send button to send the answer from the entry box to the definition of answer1
send = tk.Button(frame, text="Send", command=answer1)
send.pack()
T2 = tk.Text(frame, height=3, width=37)
T2.pack()
T2.insert(tk.END, "I did not understand your response.")
T2.configure(fg='white', bg='blue')
#Make an entry box to answer the question in
e2 = tk.Entry(master=frame, fg='black', bg='lightgray', width=37)
e2.pack()
T3 = tk.Text(frame, height=3, width=37)
T3.pack()
T3.insert(tk.END, "I did not understand your response.")
T3.configure(fg='white', bg='blue')
#Make a Send button to send the answer from the entry box to the definition of answer2
send2 = tk.Button(frame, text="Send", command=answer2)
send2.pack()
root.mainloop()