反向 ttk.Progressbar()
Reverse ttk.Progressbar()
想知道如何将 ttk.Progressbar() 填充到最大值(用户指定的任何数字)并以指定的增量减少条形图。因此,采用 100% 填充条(例如用户指定 100 作为最大值)并每 15 秒减少 25%。这是我得到的:
#import module for update frequency and gui. ttk for progressbar
import threading,ttk
from Tkinter import *
#establishs counter for testing purposes
counter = 0
#establish window
root = Tk()
def main():
#user inputs health
health = float(input("Enter health:"))
#user inputs how much damage each bullet does
dps = float(input("Enter Damage per shot:"))
#user inputs the fire rate of the weapon
spm = float(input("Enter Fire Rate:"))
#from user inputs establish how many shots it takes to reduce health to or below zero
if ((health / dps).is_integer()) is False: #checks if the stk value will be a float
stk = int(health / dps) + 1 #since stk value is a float go up to next whole number. 33dps doesn't kill in 3 shots.
else: #if stk value is an integer, establishes stk variable
stk = health / dps
delay_in_seconds = float(60 / spm)
#establishes the time to kill in seconds, take one from stk to account for delay of gunfire
ttki = ((stk - 1) * delay_in_seconds)
# establish progressbar
progre = ttk.Progressbar(root, orient='horizontal', maximum=health, mode='determinate')
progre.pack(fill=X)
# test on how to test for frequency of updating GUI once I figure out how in the heck to build it
def DPS_Timer():
global counter
print counter
if counter != (stk-1):
counter += 1
progre.step(float((health/stk)))
root.after(int(ttki*1000/stk), DPS_Timer)
else:
progre.stop()
# establish GUI Button
B1 = Button(root, text='start', command=DPS_Timer).pack(fill=X)
root.mainloop()
main()
基本上我想要这部分代码
# establish progressbar
progre = ttk.Progressbar(root, orient='horizontal', maximum=health, mode='determinate')
progre.pack(fill=X)
# test on how to test for frequency of updating GUI once I figure out how in the heck to build it
def DPS_Timer():
global counter
print counter
if counter != (stk-1):
counter += 1
progre.step(float((health/stk)))
root.after(int(ttki*1000/stk), DPS_Timer)
else:
progre.stop()
# establish GUI Button
B1 = Button(root, text='start', command=DPS_Timer).pack(fill=X)
说 "Hey ttk.Progressbar(), depict the bar at 100% / the maximum value of health and I need you to reduce it at this step value at this rate." 这也可能提供一些它没有提供给我的见解:http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-Progressbar.html and https://docs.python.org/2/library/ttk.html#index-0
原始代码已修改为基于 GUI,所以这是我的新代码,它有一个问题,即 ttk.Progressbar() 在选择开始按钮之前用已经丢失的块进行初始化。 Just to specify, when the start button is selected it needs to be held off for the delay period before even the first chunk is removed.
#import module for update frequency and gui. ttk for progressbar
import ttk
from Tkinter import *
#establish window
root = Tk()
E1 = Entry(root)
E2 = Entry(root)
E3 = Entry(root)
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
def captcha_health():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
try:
health = float(E1.get())
except ValueError:
exit()
Entry2()
def captcha_dps():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
try:
dps = float(E2.get())
except ValueError:
exit()
Entry3()
def captcha_spm():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
try:
spm = float(E3.get())
except ValueError:
exit()
estvar()
def Entry2():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
# user inputs how much damage each bullet does
E2.grid(sticky='we')
DB = Button(root, text='enter damage/shot', command=captcha_dps).grid()
def Entry3():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
# user inputs the fire rate of the weapon
E3.grid(sticky='we')
SB = Button(root, text='enter fire rate', command=captcha_spm).grid()
def estvar():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
# establishs counter for testing purposes
counter = 0
# from user inputs establish how many shots it takes to reduce health to or below zero
if ((health / dps).is_integer()) is False: # checks if the stk value will be a float
stk = int(
health / dps) + 1 # since stk value is a float go up to next whole number. 33dps doesn't kill in 3 shots.
else: # if stk value is an integer, establishes stk variable
stk = health / dps
delay_in_seconds = float(60 / spm)
# establishes the time to kill in seconds, take one from stk to account for delay of gunfire
ttki = ((stk - 1) * delay_in_seconds)
guiest()
def DPS_Timer():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
counter += 1
progre.step(-1*dps)
if counter < stk:
root.after(int(ttki*1000/stk), DPS_Timer)
def guiest():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
# establish GUI Button
ttkLabel = Label(root, text='Time to kill: ' + str(ttki)).grid(sticky=W)
stkLabel = Label(root, text='Shots to kill: ' + str(stk)).grid(sticky=W)
hhLabel = Label(root, text='Health: ' + str(health)).grid(sticky=W)
dpsLabel = Label(root, text='Damage/shot: ' + str(dps)).grid(sticky=W)
spmLabel = Label(root, text='Fire rate: ' + str(spm)).grid(sticky=W)
delayLabel = Label(root, text='Delay between shots: ' + str(delay_in_seconds)).grid(sticky=W)
B1 = Button(root, text='start', command=DPS_Timer).grid(sticky='we')
# establish progressbar
progre = ttk.Progressbar(root, orient='horizontal', maximum=health, mode='determinate')
progre.grid(sticky='we')
progre.step(health-1)
#user inputs health
E1.grid(sticky='we')
HB = Button(root, text='enter health value', command=captcha_health).grid()
root.mainloop()
为了将健康栏设置为 100%,我们可以使用
progre.step(health - 1)
DPS_Timer() 函数的正上方。从那里开始,除了步长值之外,您的功能大部分都是正确的。我们希望步长为负,因为我们正在降低健康栏的价值。此外,除非我们在某个时候使用 .start(),否则 .stop() 是无用的,因此我们可以完全删除该代码块。一旦 counter 等于 stk,无论如何都不会调用 root.after(),所以我们不需要 else 语句。这是给我们的:
def DPS_Timer():
global counter
print(counter)
if counter < stk:
counter += 1
progre.step(-1*health/stk)
root.after(int(ttki*1000/stk), DPS_Timer)
此外,您的 progre.step() 实际上并没有消除 dps 给予的伤害量。我们可以用
解决这个问题
progre.step(health - 1)
def DPS_Timer():
global counter
print(counter)
counter += 1
progre.step(-1*dps)
if counter < stk:
root.after(int(ttki*100/stk), DPS_Timer)
(我移动了 if 语句所以 DPS_Timer 不会被称为额外时间)
想知道如何将 ttk.Progressbar() 填充到最大值(用户指定的任何数字)并以指定的增量减少条形图。因此,采用 100% 填充条(例如用户指定 100 作为最大值)并每 15 秒减少 25%。这是我得到的:
#import module for update frequency and gui. ttk for progressbar
import threading,ttk
from Tkinter import *
#establishs counter for testing purposes
counter = 0
#establish window
root = Tk()
def main():
#user inputs health
health = float(input("Enter health:"))
#user inputs how much damage each bullet does
dps = float(input("Enter Damage per shot:"))
#user inputs the fire rate of the weapon
spm = float(input("Enter Fire Rate:"))
#from user inputs establish how many shots it takes to reduce health to or below zero
if ((health / dps).is_integer()) is False: #checks if the stk value will be a float
stk = int(health / dps) + 1 #since stk value is a float go up to next whole number. 33dps doesn't kill in 3 shots.
else: #if stk value is an integer, establishes stk variable
stk = health / dps
delay_in_seconds = float(60 / spm)
#establishes the time to kill in seconds, take one from stk to account for delay of gunfire
ttki = ((stk - 1) * delay_in_seconds)
# establish progressbar
progre = ttk.Progressbar(root, orient='horizontal', maximum=health, mode='determinate')
progre.pack(fill=X)
# test on how to test for frequency of updating GUI once I figure out how in the heck to build it
def DPS_Timer():
global counter
print counter
if counter != (stk-1):
counter += 1
progre.step(float((health/stk)))
root.after(int(ttki*1000/stk), DPS_Timer)
else:
progre.stop()
# establish GUI Button
B1 = Button(root, text='start', command=DPS_Timer).pack(fill=X)
root.mainloop()
main()
基本上我想要这部分代码
# establish progressbar
progre = ttk.Progressbar(root, orient='horizontal', maximum=health, mode='determinate')
progre.pack(fill=X)
# test on how to test for frequency of updating GUI once I figure out how in the heck to build it
def DPS_Timer():
global counter
print counter
if counter != (stk-1):
counter += 1
progre.step(float((health/stk)))
root.after(int(ttki*1000/stk), DPS_Timer)
else:
progre.stop()
# establish GUI Button
B1 = Button(root, text='start', command=DPS_Timer).pack(fill=X)
说 "Hey ttk.Progressbar(), depict the bar at 100% / the maximum value of health and I need you to reduce it at this step value at this rate." 这也可能提供一些它没有提供给我的见解:http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-Progressbar.html and https://docs.python.org/2/library/ttk.html#index-0
原始代码已修改为基于 GUI,所以这是我的新代码,它有一个问题,即 ttk.Progressbar() 在选择开始按钮之前用已经丢失的块进行初始化。 Just to specify, when the start button is selected it needs to be held off for the delay period before even the first chunk is removed.
#import module for update frequency and gui. ttk for progressbar
import ttk
from Tkinter import *
#establish window
root = Tk()
E1 = Entry(root)
E2 = Entry(root)
E3 = Entry(root)
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
def captcha_health():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
try:
health = float(E1.get())
except ValueError:
exit()
Entry2()
def captcha_dps():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
try:
dps = float(E2.get())
except ValueError:
exit()
Entry3()
def captcha_spm():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
try:
spm = float(E3.get())
except ValueError:
exit()
estvar()
def Entry2():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
# user inputs how much damage each bullet does
E2.grid(sticky='we')
DB = Button(root, text='enter damage/shot', command=captcha_dps).grid()
def Entry3():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
# user inputs the fire rate of the weapon
E3.grid(sticky='we')
SB = Button(root, text='enter fire rate', command=captcha_spm).grid()
def estvar():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
# establishs counter for testing purposes
counter = 0
# from user inputs establish how many shots it takes to reduce health to or below zero
if ((health / dps).is_integer()) is False: # checks if the stk value will be a float
stk = int(
health / dps) + 1 # since stk value is a float go up to next whole number. 33dps doesn't kill in 3 shots.
else: # if stk value is an integer, establishes stk variable
stk = health / dps
delay_in_seconds = float(60 / spm)
# establishes the time to kill in seconds, take one from stk to account for delay of gunfire
ttki = ((stk - 1) * delay_in_seconds)
guiest()
def DPS_Timer():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
counter += 1
progre.step(-1*dps)
if counter < stk:
root.after(int(ttki*1000/stk), DPS_Timer)
def guiest():
global health, dps, spm, ttki, stk, delay_in_seconds, progre, counter
# establish GUI Button
ttkLabel = Label(root, text='Time to kill: ' + str(ttki)).grid(sticky=W)
stkLabel = Label(root, text='Shots to kill: ' + str(stk)).grid(sticky=W)
hhLabel = Label(root, text='Health: ' + str(health)).grid(sticky=W)
dpsLabel = Label(root, text='Damage/shot: ' + str(dps)).grid(sticky=W)
spmLabel = Label(root, text='Fire rate: ' + str(spm)).grid(sticky=W)
delayLabel = Label(root, text='Delay between shots: ' + str(delay_in_seconds)).grid(sticky=W)
B1 = Button(root, text='start', command=DPS_Timer).grid(sticky='we')
# establish progressbar
progre = ttk.Progressbar(root, orient='horizontal', maximum=health, mode='determinate')
progre.grid(sticky='we')
progre.step(health-1)
#user inputs health
E1.grid(sticky='we')
HB = Button(root, text='enter health value', command=captcha_health).grid()
root.mainloop()
为了将健康栏设置为 100%,我们可以使用
progre.step(health - 1)
DPS_Timer() 函数的正上方。从那里开始,除了步长值之外,您的功能大部分都是正确的。我们希望步长为负,因为我们正在降低健康栏的价值。此外,除非我们在某个时候使用 .start(),否则 .stop() 是无用的,因此我们可以完全删除该代码块。一旦 counter 等于 stk,无论如何都不会调用 root.after(),所以我们不需要 else 语句。这是给我们的:
def DPS_Timer():
global counter
print(counter)
if counter < stk:
counter += 1
progre.step(-1*health/stk)
root.after(int(ttki*1000/stk), DPS_Timer)
此外,您的 progre.step() 实际上并没有消除 dps 给予的伤害量。我们可以用
解决这个问题progre.step(health - 1)
def DPS_Timer():
global counter
print(counter)
counter += 1
progre.step(-1*dps)
if counter < stk:
root.after(int(ttki*100/stk), DPS_Timer)
(我移动了 if 语句所以 DPS_Timer 不会被称为额外时间)