我还希望数字倒计时是一个垂直条,它的体积会减小,好像是一个瓶子倒空。这可能吗? 我还希望滑块上设置的值是3个LED的定时输出,并保持这些LED在这段时间内保持开启状态。这也有可能吗? 我是一个完整的Python菜鸟,刚刚购买了一个Raspberry Pi。 任何帮助都会很棒! 请指教,
from Tkinter import *
#-----------------------------------------------
frame_1 = None
frame_2 = None
time = 0
#-----------------------------------------------
def create_frame_1():
global frame_1
frame_1 = Frame(window)
frame_1.configure(bg='purple')
label = Label(frame_1, text='EuroFlow E-cig Filler')
label.grid(row=0, column=1)
btn_nxt = Button(frame_1, bg='purple', text='Enter', command=show_frame_2)
btn_nxt.grid(row=1, column=1, padx=100, pady=100)
def create_frame_2():
def show_values():
print w1.get(), w2.get(), w3.get()
global frame_2
frame_2 = Frame(window)
frame_2.configure(bg='purple')
btn_ent = Button(frame_2, text='Enter', command=timed_window)
btn_ent.grid(row=3, column=3, padx=5, pady=5)
label_chem = Label(frame_2, bg='purple', text='Please Choose Chemical Levels')
label_chem.grid(row=0, column=2, padx=5, pady=5)
label_nic = Label(frame_2, bg='purple', text='Nictonine (ml)')
label_nic.grid(row=1, column=1, padx=5, pady=5)
label_glyc = Label(frame_2, bg='purple', text='Glycol (ml)')
label_glyc.grid(row=1, column=2, padx=5, pady=5)
label_gli = Label(frame_2 , bg='purple', text='Glycerine (ml)')
label_gli.grid(row=1, column=3, padx=5, pady=5)
w1 = Scale(frame_2, troughcolor='green', bg='purple', from_=30, to=0, orient=VERTICAL, resolution=0.5)
w1.grid(row=2, column=1, padx=5, pady=5)
w2 = Scale(frame_2, troughcolor='green', bg='purple', from_=30, to=0, orient=VERTICAL, resolution=0.5)
w2.grid(row=2, column=2, padx=5, pady=5)
w3 = Scale(frame_2, troughcolor='green', bg='purple', from_=30, to=0, orient=VERTICAL, resolution=0.5)
w3.grid(row=2, column=3, padx=5, pady=5)
btn_back = Button(frame_2, text='Back', command=show_frame_1)
btn_back.grid(row=3, column=1, padx=5, pady=5)
#-----------------------------------------------
def show_frame_1():
frame_2.pack_forget()
window.title('EuroFlow')
frame_1.pack()
def show_frame_2():
frame_1.pack_forget()
window.title('Process Screen')
frame_2.pack()
#-----------------------------------------------
def timed_window():
global time
time = 500 #------ I want this value to be a sum of the 3 values set on the sliders
def countdown():
global time
if time > 0:
time -= 1
lab.config(text=str(time))
subwindow.after(100, countdown) # 100 miliseconds
else:
subwindow.destroy()
subwindow = Toplevel(window)
subwindow.title('countdown')
subwindow.configure(bg='purple')
lab = Label(subwindow, bg='purple', text=str(time))
lab.pack(padx=20, pady=20)
subwindow.after(100, countdown) # 100 miliseconds
#-----------------------------------------------
window = Tk()
create_frame_1()
create_frame_2()
show_frame_1()
window.mainloop()
答案 0 :(得分:-1)
您可以通过执行w1.get()从每个滑块获取值,但是只有在全局声明滑块(不良做法)或者重新编写应用程序以作为类工作时才能获得该值,并且滑块属于该类。
一个类旨在保存结构,因此您可以使用类定义结构并实例化它,以使此更清晰,大多数tkinter小部件(如框架和标签)都是类的示例。
from Tkinter import *
class App():
def __init__(self):
#create window
self.window = Tk()
#create frame 1
self.frame_1 = Frame(self.window)
self.frame_1.configure(bg='purple')
label = Label(self.frame_1, text='EuroFlow E-cig Filler')
label.grid(row=0, column=1)
btn_nxt = Button(self.frame_1, bg='purple', text='Enter', command=self.show_frame_2)
btn_nxt.grid(row=1, column=1, padx=100, pady=100)
#create frame 2
self.frame_2 = Frame(self.window)
self.frame_2.configure(bg='purple')
btn_ent = Button(self.frame_2, text='Enter', command=self.timed_window)
btn_ent.grid(row=3, column=3, padx=5, pady=5)
label_chem = Label(self.frame_2, bg='purple', text='Please Choose Chemical Levels')
label_chem.grid(row=0, column=2, padx=5, pady=5)
label_nic = Label(self.frame_2, bg='purple', text='Nictonine (ml)')
label_nic.grid(row=1, column=1, padx=5, pady=5)
label_glyc = Label(self.frame_2, bg='purple', text='Glycol (ml)')
label_glyc.grid(row=1, column=2, padx=5, pady=5)
label_gli = Label(self.frame_2 , bg='purple', text='Glycerine (ml)')
label_gli.grid(row=1, column=3, padx=5, pady=5)
self.w1 = Scale(self.frame_2, troughcolor='green', bg='purple', from_=30, to=0, orient=VERTICAL, resolution=0.5)
self.w1.grid(row=2, column=1, padx=5, pady=5)
self.w2 = Scale(self.frame_2, troughcolor='green', bg='purple', from_=30, to=0, orient=VERTICAL, resolution=0.5)
self.w2.grid(row=2, column=2, padx=5, pady=5)
self.w3 = Scale(self.frame_2, troughcolor='green', bg='purple', from_=30, to=0, orient=VERTICAL, resolution=0.5)
self.w3.grid(row=2, column=3, padx=5, pady=5)
btn_back = Button(self.frame_2, text='Back', command=self.show_frame_1)
btn_back.grid(row=3, column=1, padx=5, pady=5)
#start by showing the first frame
self.show_frame_1()
def show_frame_1(self):
self.frame_2.pack_forget()
self.window.title('EuroFlow')
self.frame_1.pack()
def show_frame_2(self):
self.frame_1.pack_forget()
self.window.title('Process Screen')
self.frame_2.pack()
def timed_window(self):
t1 = self.w1.get() # get each of the slider values
t2 = self.w2.get()
t3 = self.w3.get()
self.time = t1 + t2 + t3 # add the values together
self.subwindow = Toplevel(self.window)
self.subwindow.title('countdown')
self.subwindow.configure(bg='purple')
self.lab = Label(self.subwindow, bg='purple', text=str(self.time))
self.lab.pack(padx=20, pady=20)
self.subwindow.after(100, self.countdown) # 100 miliseconds
def countdown(self):
if self.time > 0:
self.time -= 1
self.lab.config(text=str(self.time))
self.subwindow.after(100, self.countdown) # 100 miliseconds
else:
self.subwindow.destroy()
if __name__ == "__main__":
app = App()
app.window.mainloop()
我已经修改了大部分代码以使用基于类的结构,但是这个程序中至少会有一个缺陷,如果值加起来是小数而不是整数,我不知道如何你的倒计时会处理它。