相关疑难解决方法(0)

如何在Python中捕获SIGINT?

我正在开发一个启动多个进程和数据库连接的python脚本.我偶尔想用Ctrl+ C信号杀死脚本,我想做一些清理工作.

在Perl我会这样做:

$SIG{'INT'} = 'exit_gracefully';

sub exit_gracefully {
    print "Caught ^C \n";
    exit (0);
}
Run Code Online (Sandbox Code Playgroud)

我如何在Python中模拟这个?

python controls signals

504
推荐指数
9
解决办法
37万
查看次数

你如何在Tkinter的事件循环中运行自己的代码?

我的小弟弟正在进入编程,而在他的科学博览会项目中,他正在模拟天空中的一群鸟.他已经完成了大部分代码编写工作,并且工作得很好,但是鸟类需要每时每刻都在移动.

然而,Tkinter占用了自己的事件循环的时间,所以他的代码不会运行.做root.mainloop()运行,运行和继续运行,它运行的唯一事情是事件处理程序.

有没有办法让他的代码与mainloop一起运行(没有多线程,这很混乱,这应该保持简单),如果是这样,它是什么?

现在,他想出了一个丑陋的黑客,把他的move()功能绑在一起<b1-motion>,所以只要他按住按钮并摆动鼠标,就可以了.但必须有一个更好的方法.

python events tkinter

110
推荐指数
4
解决办法
13万
查看次数

Tkinter了解mainloop

直到现在,我曾经用以下结束我的Tkiter程序:tk.mainloop()或者什么都不会出现!见例子:

from Tkinter import *
import random
import time

tk = Tk()
tk.title = "Game"
tk.resizable(0,0)
tk.wm_attributes("-topmost", 1)

canvas = Canvas(tk, width=500, height=400, bd=0, highlightthickness=0)
canvas.pack()

class Ball:
    def __init__(self, canvas, color):
        self.canvas = canvas
        self.id = canvas.create_oval(10, 10, 25, 25, fill=color)
        self.canvas.move(self.id, 245, 100)
    def draw(self):
        pass

ball = Ball(canvas, "red")

tk.mainloop()
Run Code Online (Sandbox Code Playgroud)

然而,当尝试下这个程序的下一步(让球随时间移动)时,本书正在阅读,说要做到以下几点.将绘图功能更改为:

def draw(self):
    self.canvas.move(self.id, 0, -1)
Run Code Online (Sandbox Code Playgroud)

并将以下代码添加到我的程序:

while 1:
    ball.draw()
    tk.update_idletasks()
    tk.update()
    time.sleep(0.01)
Run Code Online (Sandbox Code Playgroud)

但我注意到添加这段代码,使用tk.mainloop()无用,因为即使没有它,一切都会出现!

在这一刻,我应该提到我的书从未谈到tk.mainloop()(也许是因为它使用Python 3)但我学会了它在网上搜索,因为我的程序不能通过复制书的代码工作!

所以我尝试做以下不起作用!

while 1:
    ball.draw()
    tk.mainloop() …
Run Code Online (Sandbox Code Playgroud)

python tkinter

49
推荐指数
2
解决办法
12万
查看次数

KeyboardInterrupt需要一段时间

所以我刚开始使用Tkinter在Linux上乱搞Python.我试图通过使用KeyboardInterrupt异常使Cntrl + C停止执行,但是当我按下它时,暂时没有任何反应.最终它"需要"并退出.一点点阅读表明这可能与线程或其他东西有关,但我对这些东西很新,我真的不知道从哪里开始.

#! /usr/bin/python
import sys
from Tkinter import *

try: 
    root = Tk()
    root.mainloop()
except:
    print "you pressed control c"
    sys.exit(0)
Run Code Online (Sandbox Code Playgroud)

我不想成为只需要快速修复的菜鸟,所以如果你的答案就像指向正确的文档一样简单,那就太棒了.

python tkinter keyboardinterrupt

7
推荐指数
1
解决办法
2162
查看次数

标签 统计

python ×4

tkinter ×3

controls ×1

events ×1

keyboardinterrupt ×1

signals ×1