Python/Gtk3:如何将Gtk.Entry添加到Gtk.MessageDialog? [英] Python/Gtk3 : How to add a Gtk.Entry to a Gtk.MessageDialog?

查看:172
本文介绍了Python/Gtk3:如何将Gtk.Entry添加到Gtk.MessageDialog?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

早上好

我正在尝试将Gtk.Entry添加到Gtk.MessageDialog.使用以下代码,似乎我添加了Gtk.Entry,但在对话框窗口(Python3/Gtk3)中看不到:

I'm trying to add a Gtk.Entry to a Gtk.MessageDialog. With the following code it seems that I added the Gtk.Entry but it's not visible on the dialog window (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

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

I'm looking for clues about making the entry visible and editable, any help is welcome.

参考文献:
http://python-gtk-3-tutorial.readthedocs. org/en/latest/dialogs.html
http://developer.gnome.org/gtk3/3.2/GtkDialog.html
简单,通用和重新PyGTK中可用的输入对话框(有时称为输入对话框)

References:
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

推荐答案

好的,现在可以了,我需要在run()之前先show_all().我花了一些时间弄清楚这个简单的事情.调试后的代码是:

Ok it works now, I needed to show_all() before run(). It took me some times to figure out this simple thing. Debugged code is :

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")

这篇关于Python/Gtk3:如何将Gtk.Entry添加到Gtk.MessageDialog?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆