gpt4 book ai didi

python - 主循环之外的 Tkinter 事件?

转载 作者:太空狗 更新时间:2023-10-30 02:34:47 25 4
gpt4 key购买 nike

我正在编写的程序有一个 tkinter 窗口,该窗口不断地手动输入数据,而不是作为主循环的一部分。它还需要跟踪鼠标位置。我还没有找到在 mainloop 之外跟踪鼠标的解决方法,但如果你有,请告诉我。

from Tkinter import *
import random
import time

def getCoords(event):
xm, ym = event.x, event.y
str1 = "mouse at x=%d y=%d" % (xm, ym)
print str1

class iciclePhysics(object):
def __init__(self, fallrange, speed=5):
self.speed = speed
self.xpos = random.choice(range(0,fallrange))
self.ypos = 0

def draw(self,canvas):
try:
self.id = canvas.create_polygon(self.xpos-10, self.ypos, self.xpos+10, self.ypos, self.xpos, self.ypos+25, fill = 'lightblue')
except:
pass

def fall(self,canvas):
self.ypos+=self.speed
canvas.move(self.id, 0, self.ypos)



root = Tk()
mainFrame = Frame(root, bg= 'yellow', width=300, height=200)
mainFrame.pack()
mainCanvas = Canvas(mainFrame, bg = 'black', height = 500, width = 500, cursor = 'circle')
mainCanvas.bind("<Motion>", getCoords)
mainCanvas.pack()

root.resizable(0, 0)
difficulty = 1500
#root.mainloop()
currentIcicles = [iciclePhysics(difficulty)]
root.update()
currentIcicles[0].draw(mainCanvas)
root.update_idletasks()
time.sleep(0.1)
currentIcicles[0].fall(mainCanvas)
root.update_idletasks()
tracker = 0
sleeptime = 0.04


while True:
tracker+=1
time.sleep(sleeptime)
if tracker % 3 == 0 and difficulty > 500:
difficulty -= 1
elif difficulty <= 500:
sleeptime-=.00002
currentIcicles.append(iciclePhysics(difficulty))
currentIcicles[len(currentIcicles)-1].draw(mainCanvas)

for i in range(len(currentIcicles)):
currentIcicles[i].fall(mainCanvas)
root.update_idletasks()

for i in currentIcicles:
if i.ypos >= 90:
currentIcicles.remove(i)
root.update_idletasks()

最佳答案

没有办法。鼠标移 Action 为一系列事件呈现给 GUI。为了处理事件,事件循环必须运行。

此外,您几乎永远不要在 GUI 应用程序中休眠。所做的只是在 sleep 期间卡住 GUI。

另一个提示:你只需要创建一次冰柱;要使其掉落,您可以使用 Canvas 的 move 方法。

如果您在理解基于事件的编程时遇到问题,解决方案不是避免事件循环,而是了解事件循环的工作原理。没有它,您几乎无法创建 GUI。

关于python - 主循环之外的 Tkinter 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6295419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com