Python3 GTK3 - 单击后立即将按钮更改为不敏感
Python3 GTK3 - Change button to insensitive immediately after click
请看下面我的测试代码:
import time
import subprocess
import os,re
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="test")
self.set_default_size(400, 190)
self.set_border_width(10)
fixed = Gtk.Fixed()
self.add(fixed)
self.button2 = Gtk.Button(label='press')
self.button2.connect("clicked", self.aaabbb)
self.button2.set_size_request(100, 20)
fixed.put(self.button2, 170, 10)
def aaabbb(self,widget):
self.button2.set_sensitive(False)
p = subprocess.run( ['/bin/bash','-c', '/bin/sleep 5'] )
print(p.returncode)
window = MyWindow()
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()
如果你运行这个简单的应用程序,你会注意到按钮仅在 5 秒后禁用,在子进程完成后 "sleep 5"
问题 - 如何在子进程启动前使按钮不敏感?
提前致谢
发生这种情况是因为子进程调用不是异步的,因此会阻塞主循环和用户界面。
所以,这个方法是不正确的。
点击信号需要按下和释放按钮,但您可以使用其他信号,例如。 button-press-event
and button-release-event
. The callback prototypes vary from the clicked 一个 如果需要,您将有权参加该活动。
你的问题的答案是,设置按钮按下事件的回调,但这并不能解决你的问题!该调用应该是异步的,并且可以使用 GLib spawn async method.
来实现
请看下面我的测试代码:
import time
import subprocess
import os,re
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="test")
self.set_default_size(400, 190)
self.set_border_width(10)
fixed = Gtk.Fixed()
self.add(fixed)
self.button2 = Gtk.Button(label='press')
self.button2.connect("clicked", self.aaabbb)
self.button2.set_size_request(100, 20)
fixed.put(self.button2, 170, 10)
def aaabbb(self,widget):
self.button2.set_sensitive(False)
p = subprocess.run( ['/bin/bash','-c', '/bin/sleep 5'] )
print(p.returncode)
window = MyWindow()
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()
如果你运行这个简单的应用程序,你会注意到按钮仅在 5 秒后禁用,在子进程完成后 "sleep 5"
问题 - 如何在子进程启动前使按钮不敏感?
提前致谢
发生这种情况是因为子进程调用不是异步的,因此会阻塞主循环和用户界面。
所以,这个方法是不正确的。
点击信号需要按下和释放按钮,但您可以使用其他信号,例如。 button-press-event
and button-release-event
. The callback prototypes vary from the clicked 一个 如果需要,您将有权参加该活动。
你的问题的答案是,设置按钮按下事件的回调,但这并不能解决你的问题!该调用应该是异步的,并且可以使用 GLib spawn async method.
来实现