2012-12-20 4 views
2

안녕하세요,Python/Gtk3 : Gtk.Entry를 Gtk.MessageDialog에 추가하는 방법은 무엇입니까?

Gtk.MessageDialogGtk.Entry을 추가하려고합니다. 다음 코드로 내가 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

확인 지금 작동, 나는 run() 전에 show_all() 필요가 있었다. 이 간단한 것을 알아내는 데는 어느 정도 시간이 걸렸습니다. 디버깅 코드는 다음과 같습니다

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") 
관련 문제