窗口仅在单击屏幕后出现

时间:2013-09-25 09:18:02

标签: python gtk pygtk xfce

我在触摸屏计算机上使用pygtk作为机器用户界面的gui。用户可以随时保存机器的实际配置。当他按下“保存配置”按钮时,我实现的虚拟键盘出现在屏幕上,使他能够引入配置名称。我的问题是按下“保存配置”按钮后,这个键盘不会直接出现。应该等待屏幕上任何地方的下一次点击以使其显示。

这是课程keyboard

class keyboard():

def __init__(self):     

    window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
    window.set_position(1)
    window.set_keep_above(True)
    window.connect("destroy", lambda w: window.destroy())
    window.set_transient_for(self.gui.window) #self.gui.window is the main window
    window.set_destroy_with_parent(True)
    window.set_skip_taskbar_hint(True)
    window.set_skip_pager_hint(True)
    window.connect("delete_event",window.hide_on_delete)
    window.deiconify()
    window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_SPLASHSCREEN)
    window.set_size_request(KBD_WIN_WIDTH,KBD_WIN_HEIGHT)
    window.set_resizable(False)

    table = gtk.Table(rows=5, columns=12, homogeneous=True)
    frame = gtk.Frame()
    frame.add(table)
    window.add(frame)
    """
    ... code to fill the table with buttons
    """
    self.window = window

这是点击“保存配置”按钮后调用的回调函数:

def save_cfg_clicked(self,widget):
    keyboard_ = keyboard(self)
    keyboard_.window.set_keep_above(True)
    keyboard_.window.set_modal(True)
    keyboard_.window.show_all()

我尝试过使用window.show_all调用函数gobject.idle_add,但这没有用。

请注意我使用的是xfce桌面。程序在Gnome上运行时不会出现此问题。

1 个答案:

答案 0 :(得分:1)

删除该行时:

window.set_transient_for(self.gui.window)
问题消失了。