python - 在下面的代码仍在运行时使用 while true 循环(python)
问题描述
我做这个游戏叫:
空闲笔,(制作笔)
每 1 秒我就会得到一支奖金笔
我怎么得到一支奖金笔是这样做的
Import time
While true
make a pen()
time.sleep(1)
但我在 while true 循环下有一些代码。while true 循环下的代码就像升级笔或制作笔的按钮那么我如何使 while true 循环下的代码工作?
这是我的游戏我很高兴任何人都可以复制它还没有准备好
import functools
import tkinter
import tkinter.messagebox
import time
from random import seed
from random import randint
# eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
window = tkinter.Tk()
window.title('Idle Pen')
def print_pen(number: int):
return f"Pens: {number}"
class pencount:
def __init__(self):
self.pencount = 0
self.text = tkinter.Text(height=1, width=30)
self.text.insert("1.0", print_pen(0))
self.text['state'] = 'disabled'
self.text.pack()
def changepencount(self, count):
if self.pencount + count < 0:
return
self.pencount = self.pencount + count
self.text['state'] = 'normal'
self.text.delete("1.0", "end")
self.text.insert("1.0", print_pen(self.pencount))
self.text['state'] = 'disabled'
self.text.pack()
pen = pencount()
changepenup = functools.partial(pen.changepencount, 1)
B = tkinter.Button(window, text="Make Pen", command=changepenup)
changependown = functools.partial(pen.changepencount, -100)
A = tkinter.Button(window, text='Penmaker', command=changependown)
Q = tkinter.Button(window, text="Quit", command=window.destroy)
U = tkinter.Button
# eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
B.pack()
A.pack()
Q.pack()
window.mainloop()
解决方案
您可以使用threading
在单独的线程中运行循环,然后主线程可以运行tkitner
或者,您可以使用tkinter
函数after()
(而不是while True
)延迟运行函数,并且该函数应再次使用after()
以自行运行。
import tkinter as tk
# --- functions ---
def update():
global value
value += 1
text = f'make penny: {value}'
print(text)
label['text'] = text
# run again after 1s (1000ms)
root.after(1000, update)
# --- main ---
value = 0
root = tk.Tk()
label = tk.Label(root, text="make penny: 0")
label.pack()
button = tk.Button(root, text="Exit", command=root.destroy)
button.pack()
# run first time after 1s (1000ms)
root.after(1000, update)
root.mainloop()
推荐阅读
- google-bigquery - 如果我们在 BigQuery 中使用具有相同分区类型(天)的另一个列进行过滤,那么 where 子句中的分区列是否不是必需的?
- json - 没有为参数evidence$2找到隐含: BodyWritable[Map[String, Object]]
- ios - React-native 升级相关类型错误
- selenium - 在 Jmeter 的 Selenium WebDriver 的下拉列表中选择选项
- scala - 使用 groupBy 选择出现次数最多的值
- angular - 角度拖放
- javascript - Object.values() 用于其属性是 Javascript 中的数组的对象
- python - Python dbf 包:读取带有备忘录数据的文件不起作用
- mysql - 修改要为下一条新记录插入的标识值
- python - 如何使用 pyinstaller 创建可独立运行的 QML 地图?