Python/Gtk3:如何将Gtk.Entry添加到Gtk.MessageDialog? [英] Python/Gtk3 : How to add a Gtk.Entry to a 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屋!