2012-12-20 51 views
2

早上好,Python/Gtk3:如何将Gtk.Entry添加到Gtk.MessageDialog?

我正在尝试添加Gtk.EntryGtk.MessageDialog。用下面的代码似乎我添加了Gtk.Entry但它不是对话窗口(Python3/Gtk3)上可见:

#!/usr/bin/python3 

from gi.repository import Gtk 

def get_user_pw(parent, message, default=''): 
    dialogWindow = Gtk.MessageDialog(parent, 
          Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, 
          Gtk.MessageType.QUESTION, 
          Gtk.ButtonsType.OK_CANCEL, 
          message) 

    dialogBox = dialogWindow.get_content_area() 
    userEntry = Gtk.Entry() 
    userEntry.set_visibility(False) 
    userEntry.set_invisible_char("*") 
    userEntry.set_size_request(250,0) 
    userEntry.set_text("Test") 
    dialogBox.pack_end(userEntry, False, False, 0) 
    #dialogWindow.vbox.pack_start(userEntry, False, False, 0) 

    response = dialogWindow.run() 
    text = userEntry.get_text() 
    dialogWindow.destroy() 
    if response == Gtk.ResponseType.OK: 
     return text 
    else: 
     return None 

class MainWindow(Gtk.Window): 

    def __init__(self): 

     Gtk.Window.__init__(self, title="MyWindowTitle") 

     userPassphrase = get_user_pw(self, "SSH key passphrase") 
     print("User passphrase: " + userPassphrase) 

此代码打印:

User passphrase: Test 

我在寻找关于使条目可见和可编辑的线索,欢迎任何帮助。

参考文献:
http://python-gtk-3-tutorial.readthedocs.org/en/latest/dialogs.html
http://developer.gnome.org/gtk3/3.2/GtkDialog.html
Simple, versatile and re-usable entry dialog (sometimes referred to as input dialog) in PyGTK


+0

你可以回答你自己的问题,接受了答案,所以这个问题不会继续开放。 – arkocal

+0

我当时做不到。我想我没有足够的声望点。现在完成了。 –

回答

5

好现在的工作,我需要show_all()run()之前。我花了一些时间才弄清楚这件简单的事情。调试代码:

def get_user_pw(parent, message, title=''): 
    # Returns user input as a string or None 
    # If user does not input text it returns None, NOT AN EMPTY STRING. 
    dialogWindow = Gtk.MessageDialog(parent, 
          Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, 
          Gtk.MessageType.QUESTION, 
          Gtk.ButtonsType.OK_CANCEL, 
          message) 

    dialogWindow.set_title(title) 

    dialogBox = dialogWindow.get_content_area() 
    userEntry = Gtk.Entry() 
    userEntry.set_visibility(False) 
    userEntry.set_invisible_char("*") 
    userEntry.set_size_request(250,0) 
    dialogBox.pack_end(userEntry, False, False, 0) 

    dialogWindow.show_all() 
    response = dialogWindow.run() 
    text = userEntry.get_text() 
    dialogWindow.destroy() 
    if (response == Gtk.ResponseType.OK) and (text != ''): 
     return text 
    else: 
     return None 

我用这样的:

class MainWindow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self, title="MyWindowTitle") 
     userPassword = get_user_pw(self, "Please enter your password", "Password")