5

おはようございます、

にを追加しようとしGtk.EntryていGtk.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
シンプルで、用途が広く、再利用可能なエントリPyGTKのダイアログ(入力ダイアログと呼ばれることもあります)


4

2 に答える 2

11

わかりました、今は動作します、私は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")
于 2014-02-13T14:06:54.057 に答える
0

これがsudoコマンドを実行するだけの場合、これは難しい方法である可能性があります-単に呼び出すことができます

os.system('pkexec (yourcommand)')

于 2022-01-26T04:33:11.523 に答える