我想设置阻止对话框后面的窗口,以防止用户在对话框运行时单击或修改窗口的任何内容,并且当用户关闭对话框时设置解锁对话框后面的窗口。
import gtk;
window = gtk.Window();
window.set_title("Window Behind Dialog");
window.set_default_size(426,240);
textentry = gtk.TextView();
window.add(textentry);
window.show_all();
dialog = gtk.Window();
dialog.set_title("Dialog");
dialog.set_default_size(256,144);
label = gtk.Label("Unlock the window behind when this dialog get close");
dialog.add(label);
dialog.show_all();
gtk.main();
Run Code Online (Sandbox Code Playgroud)
在 Gtk 或 PyGtk 中使用哪种方法?例如:
window.set_disabled_to_all_events();
Run Code Online (Sandbox Code Playgroud)
或者
window.set_disabled();
Run Code Online (Sandbox Code Playgroud)
或者
window.events_disabled(True);
Run Code Online (Sandbox Code Playgroud)
或者
window.set_blocked(True);
Run Code Online (Sandbox Code Playgroud)
如果您有支持模式窗口的窗口管理器,则可以set_modal在对话框窗口上使用。
如果没有,您可以set_sensitive在父窗口上使用。False显示对话框时调用此函数,True隐藏或销毁对话框时调用此函数。
我在下面添加了 Gtk3 示例。我建议您在在已弃用的工具包上投入太多精力之前切换到 PyGObject 和 Python 3。
模态窗口示例:
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
window = Gtk.Window(title="Hello World")
window.connect("destroy", Gtk.main_quit)
window.add(Gtk.TextView())
window.show_all()
dialog = Gtk.Window(title="Dialog")
dialog.set_transient_for(window)
dialog.set_modal(True)
dialog.show()
Gtk.main()
Run Code Online (Sandbox Code Playgroud)
或者使用显式set_sensitive:
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
window = Gtk.Window(title="Hello World")
window.connect("destroy", Gtk.main_quit)
window.add(Gtk.TextView())
window.show_all()
dialog = Gtk.Window(title="Dialog")
dialog.set_transient_for(window)
window.set_sensitive(False)
def destroy_cb(widget, data):
data.set_sensitive(True)
dialog.connect("destroy", destroy_cb, window)
dialog.show()
Gtk.main()
Run Code Online (Sandbox Code Playgroud)