簡體   English   中英

更改Gtk.Button標簽的樣式/字體

[英]Change Style / Font of the Label of a Gtk.Button

環境:Python 3.4.3,GTK + 3

嘿,我正在嘗試使用Gtk.ToggleButton編寫一個Gtk應用程序,以便能夠更改其Label的字體。 這是我的示例,我想使Label為“ active”,當您單擊按鈕時,它會變得很牢固

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:必須為字符串,而不是Label 在這種情況下,函數如下所示:

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

似乎像Buttonlabel只是接受字符串。 我還考慮過將文本轉換為圖片並將其放在Button上,但是應該有一種更簡單的方法...

謝謝你的想法!

好的,感謝@andlabs,現在我得到了正確的代碼。 我可以通過使用get_child()獲得Gtk.Button的標簽,然后將set_markup()與類似html的styleconfiguration一起使用:

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

感謝您的快速幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM