【问题标题】:Python/Gtk3 : How to add a Gtk.Entry to a Gtk.MessageDialog?Python/Gtk3:如何将 Gtk.Entry 添加到 Gtk.MessageDialog?
【发布时间】:2012-12-20 10:48:08
【问题描述】:

早上好,

我正在尝试将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
Simple, versatile and re-usable entry dialog (sometimes referred to as input dialog) in PyGTK


【问题讨论】:

  • 您可以回答自己的问题并接受答案,这样问题就不会一直悬而未决。
  • 当时我做不到。我认为我没有足够的声望点。现在完成了。

标签: gtk3 python-3.2


【解决方案1】:

好的,现在可以了,我需要在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")

【讨论】:

    【解决方案2】:

    如果这只是为了运行一个 sudo 命令,这可能会很困难 - 你可以简单地调用

    os.system('pkexec (yourcommand)')

    【讨论】:

      猜你喜欢
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 2016-03-11
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多