按钮不会出现,有什么提示吗?。屏幕截图功能很好,但按钮不行,我有自己关闭它。
import time
from tkinter import *
import pyautogui
class App:
def __init__(self, master, task):
frame = Frame(master)
frame.pack()
self.button = Button(
frame, text="QUIT", fg="red", command=frame.quit
)
self.button.pack(side=LEFT)
frame.after(0,task)
def task():
i = 1
while i > 0:
myScreenshot = pyautogui.screenshot()
myScreenshot.save(r"C:UserselsinDesktoppythonnameTask" + str(i) + ".png")
time.sleep(2)
i += 1
root = Tk()
app = App(root,task())
root.mainloop()
错误:
C:UserselsinPycharmProjectspythonProjectvenvScriptspython.exe C:/Users/elsin/PycharmProjects/pythonProject/1.py
Traceback (most recent call last):
File "C:UserselsinPycharmProjectspythonProject1.py", line 28, in <module>
app = App(root,task())
File "C:UserselsinPycharmProjectspythonProject1.py", line 23, in task
time.sleep(2)
KeyboardInterrupt
Process finished with exit code -1073741510 (0xC000013A: interrupted by Ctrl+C)
首先:您必须发送不带()
的函数名称。
此时此刻,你有了类似的东西
result = task()
app = App(root, result)
但是task()
运行while
-循环,该循环一直运行,并且代码从未到达App(root, result)
-行,因此它不能显示它。
如果您发送函数的名称,那么您将遇到另一个问题——您的frame.after(0, task)
立即启动此任务,它会阻塞其余的代码。
如果您使用一些延迟frame.after(100, task)
,那么它将有时间显示带有按钮的窗口。
但运行while
-循环的task
仍然存在问题,它阻塞了主循环
and
tkinter`被冻结。
主要问题是有两个循环必须同时工作:
- 第一个:CCD_ 11
- 第二个:
while
循环
并且这需要在分离的线程中运行其中一个,或者您必须使用root.after(2000, task)
而不是while
+sleep()
BTW:您应该使用master.destroy
而不是frame.quit
来停止tkinter程序
import time
import tkinter as tk # PEP8: `import *` is not preferred
import pyautogui
class App:
def __init__(self, master, task):
frame = tk.Frame(master)
frame.pack()
self.button = tk.Button(frame, text="QUIT", fg="red", command=master.destroy)
self.button.pack(side='left')
frame.after(100, task, 1)
def task(i):
myScreenshot = pyautogui.screenshot()
myScreenshot.save(r"C:UserselsinDesktoppythonnameTask" + str(i) + ".png")
i += 1
root.after(2000, task, i)
root = tk.Tk()
app = App(root, task)
root.mainloop()