Skip to main content
 首页 » 编程设计

python之如何在 python 中更改 gtk messagedialog 中的主要文本

2025年05月04日16dflying

我正在使用 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一样。