Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改Gtk.按钮标签的样式/字体_Python_Python 3.x_Gtk_Gtk3 - Fatal编程技术网

Python 更改Gtk.按钮标签的样式/字体

Python 更改Gtk.按钮标签的样式/字体,python,python-3.x,gtk,gtk3,Python,Python 3.x,Gtk,Gtk3,环境:Python 3.4.3、GTK+3 嘿,那里, 我正在尝试编写一个带有Gtk的Gtk应用程序。ToggleButton能够更改标签的字体。下面是我的示例,我想将单击按钮时得到的标签“active”设置为strong from gi.repository import Gtk class TOGGLE_WINDOW: def delete_event(self, widget, event, data=None): print('delete event occ

环境:Python 3.4.3、GTK+3

嘿,那里, 我正在尝试编写一个带有Gtk的Gtk应用程序。ToggleButton能够更改标签的字体。下面是我的示例,我想将单击按钮时得到的标签“active”设置为strong

from gi.repository import Gtk

class TOGGLE_WINDOW:

    def delete_event(self, widget, event, data=None):
        print('delete event occurred')
        return False

    def destroy(self, widget, data=None):
        Gtk.main_quit()

    def __init__(self):
        self.window = Gtk.Window()
        self.window.set_title('Toggle Button Font Change')
        self.window.connect('delete_event', self.delete_event)
        self.window.connect('destroy', self.destroy)

        self.box = Gtk.HBox()
        self.box.set_size_request(400, 50)

        self.toggle = Gtk.ToggleButton(label = 'inactive')
        self.toggle.connect('toggled', self.on_toggled, 'toggle')

        self.box.pack_start(self.toggle, True, True, 0)
        self.window.add(self.box)

        self.window.show_all()

    def on_toggled(self, event, widget):
        state = self.toggle.get_active()

        if state == True:
            self.toggle.set_label('active')
        else:
            self.toggle.set_label('inactive')

    def main(self):
        Gtk.main()

if __name__=='__main__':
    run = TOGGLE_WINDOW()
    run.main()
当我尝试使用外部Gtk.Label来放置按钮时,Python说: TypeError:必须是字符串,而不是标签。 在这种情况下,函数如下所示:

def on_toggled(self, event, widget):
    state = self.toggle.get_active()

    self.label = Gtk.Label()
    self.label.set_markup('<b>active</b>')

    if state == True:
      self.toggle.set_label(self.label)
    else:
      self.toggle.set_label('inactive')
def on_切换(自身、事件、小部件):
state=self.toggle.get_active()
self.label=Gtk.label()
self.label.set_标记('active')
如果state==True:
self.toggle.set_标签(self.label)
其他:
self.toggle.set_标签('inactive')
看起来Buttonlabel只接受字符串。 我也想过把文字转换成图片,然后把它放在按钮上,但是应该有一个更简单的方法

谢谢你的建议

好的,多亏了你,我现在得到了正确的代码。 我可以使用get_child()获取Gtk.按钮的标签,然后使用set_markup()和类似html的样式配置:

from gi.repository import Gtk

class TOGGLE_WINDOW:

    def delete_event(self, widget, event, data=None):
        print('delete event occurred')
        return False

    def destroy(self, widget, data=None):
        Gtk.main_quit()

    def __init__(self):
        self.window = Gtk.Window()
        self.window.set_title('Toggle Button Font Change')
        self.window.connect('delete_event', self.delete_event)
        self.window.connect('destroy', self.destroy)

        self.box = Gtk.HBox()
        self.box.set_size_request(400, 50)

        self.toggle = Gtk.ToggleButton(label = 'inactive')
        self.toggle.connect('toggled', self.on_toggled, 'toggle')

        self.box.pack_start(self.toggle, True, True, 0)
        self.window.add(self.box)

        self.window.show_all()

    def on_toggled(self, event, widget):
        state = self.toggle.get_active()

        if state == True:
            # here I get the Label and set its markup
            self.label = self.toggle.get_child()
            self.label.set_markup('<b>active</b>')  
        else:
            self.toggle.set_label('inactive')

    def main(self):
        Gtk.main()

if __name__=='__main__':
    run = TOGGLE_WINDOW()
    run.main()
从gi.repository导入Gtk
类切换窗口:
def delete_事件(自身、小部件、事件、数据=无):
打印('发生删除事件')
返回错误
def destroy(self,widget,data=None):
Gtk.main_quit()
定义初始化(自):
self.window=Gtk.window()
self.window.set_title('切换按钮字体更改')
self.window.connect('delete\u event',self.delete\u event)
self.window.connect('destroy',self.destroy)
self.box=Gtk.HBox()
self.box.set\u size\u请求(400,50)
self.toggle=Gtk.ToggleButton(标签='inactive')
self.toggle.connect('toggled',self.on_toggled',toggle'))
self.box.pack\u start(self.toggle,True,True,0)
self.window.add(self.box)
self.window.show_all()
def on_切换(自身、事件、小部件):
state=self.toggle.get_active()
如果state==True:
#在这里,我获取标签并设置其标记
self.label=self.toggle.get_child()
self.label.set_标记('active')
其他:
self.toggle.set_标签('inactive')
def主(自):
Gtk.main()
如果“名称”=“\uuuuuuuu主要”:
运行=切换窗口()
run.main()

谢谢你的快速帮助

GtkButton的
set_label()
方法只接受字符串,但GtkButton是一个GtkBin,因此您可以使用
get_child()
访问标签小部件。谢谢您,这很有效!我要把这个写进一个答案里。