我正在使用 glade 使用 gtk 作为 gui 在 python 中创建程序。在那个程序中,我有几个消息对话框。如果我只是为每个案例制作许多消息对话框,这很简单。但是,是否可以只制作一个消息对话框并将其用于不同文本的不同情况?其实很简单。我只需要更改主要文本并显示它。但是,我找不到更改主要文本的方法 here和 here .
下面是一个示例代码:
from gi.repository import Gtk
def clicked1(widget):
response = dialog1.run()
if response == Gtk.ResponseType.OK:
print 'ok'
else:
print 'cancel'
dialog1.destroy()
def clicked2(widget):
response = dialog2.run()
if response == Gtk.ResponseType.OK:
print 'ok'
else:
print 'cancel'
dialog2.destroy()
def clicked3(widget):
response = dialog3.run()
if response == Gtk.ResponseType.OK:
print 'ok'
else:
print 'cancel'
dialog3.destroy()
builder = Gtk.Builder()
builder.add_from_file('gui.glade')
dialog1 = builder.get_object('dialog1')
dialog2 = builder.get_object('dialog2')
dialog3 = builder.get_object('dialog3')
builder.get_object('button1').connect('clicked', clicked1)
builder.get_object('button2').connect('clicked', clicked2)
builder.get_object('button3').connect('clicked', clicked3)
builder.get_object('window1').show_all()
Gtk.main()
我想改成这样
from gi.repository import Gtk
def clicked1(widget):
**dialog.set_text(1)**
response = dialog.run()
if response == Gtk.ResponseType.OK:
print 'ok'
else:
print 'cancel'
dialog.destroy()
def clicked2(widget):
**dialog.set_text(2)**
response = dialog.run()
if response == Gtk.ResponseType.OK:
print 'ok'
else:
print 'cancel'
dialog.destroy()
def clicked3(widget):
**dialog.set_text(3)**
response = dialog.run()
if response == Gtk.ResponseType.OK:
print 'ok'
else:
print 'cancel'
dialog.destroy()
builder = Gtk.Builder()
builder.add_from_file('gui.glade')
**dialog = builder.get_object('dialog')**
builder.get_object('button1').connect('clicked', clicked1)
builder.get_object('button2').connect('clicked', clicked2)
builder.get_object('button3').connect('clicked', clicked3)
builder.get_object('window1').show_all()
Gtk.main()
请您参考如下方法:
也许有点晚了,但我一直在寻找同样的东西,我可以获得一种简单而有效的方法来更改主要和次要文本,而无需调用任何 GtkMessageDialog 预构建方法。
我只是想了解如何在不调用预构建方法“set_markup”和“format_secondary_text”的情况下更轻松地更改这些文本。即使“format_secondary_text”像一个魅力一样工作并且事实上完美地改变了第二个文本,“set_markup”改变了主要文本,但不是它应该的因为它在第二个文本存在的情况下没有作为标题,我希望它变成粗体,但它正在等待一些 PANGO 标记,否则它只是一个简单的非粗体文本。
然后我打开 Idle 只是为了查看 GtkMessageDialog 可能可用的所有方法、属性等,我发现了一些东西,我将其粘贴在下面:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
builder = Gtk.Builder()
#any Glade file with at least 1 GtkMessageDialog
builder.add_from_file("myFile.glade")
#The ID of GtkMessageDialog in Glade
myDialog = builder.get_object("GtkMessageDialog1")
#Below I change primary and secondary texts before running the Dialog.
myDialog.set_property("text","Hello World")
myDialog.set_property("secondary_text","Here I go again.")
myDialog.run()
myDialog.hide()
注意是我用Python 2.7写的,原理一定和Python 3.x一样。
