2013-09-25 5 views
1

Я использую 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

Звучит как проблема с менеджером окон. Некоторые оконные менеджеры хотят, чтобы вы нажимали на экран, чтобы решить, где разместить окно. Я не знаю, как Xfce это делает, но TWM определенно это делает. Может быть, привязка мыши иллюстрирует это более четко, вместо использования сенсорного экрана? –

+0

Проблема остается, когда я нажимаю кнопку с помощью мыши. –

+0

Я хочу сказать, что при первом создании окна диспетчер окон обычно создает контур (который перемещается курсором мыши). После того, как вы щелкнете, окно будет размещено там, где находится контур, и появится. Только причина, по которой я предложил мышь, сделать ее более очевидной, если контур там (чтобы подтвердить правильность моей теории). –

ответ

1

При удалении строки:

window.set_transient_for(self.gui.window) 

проблемных пропадает.

Смежные вопросы