带图标和文字的Gtk.RadioToolButton?

时间:2013-02-28 17:15:21

标签: python gtk radio-button toggle gnome

这是我的工具按钮代码(在工具栏中):

self.mainWindow.mainBox.mainToolbar.overviewRadio = Gtk.RadioToolButton(stock_id=Gtk.STOCK_ABOUT)
self.mainWindow.mainBox.mainToolbar.overviewRadio.set_label("Overview")
# self.mainWindow.mainBox.mainToolbar.overviewRadio.show_label() (No such function)
self.mainWindow.mainBox.mainToolbar.overviewRadio.connect("clicked", self.on_overviewRadio_clicked)

以下是输出的屏幕截图:

Screennshot

如您所见,没有标签 - 如何设置要显示的标签?

这是我的代码,对于那些感兴趣的人:

#! /usr/bin/env python3

###    Copyright (c) 2013 - Marco Scannadinari

###    This program is free software: you can redistribute it and/or modify
###    it under the terms of the GNU General Public License as published by
###    the Free Software Foundation, either version 3 of the License, or
###    (at your option) any later version.
###
###    This program is distributed in the hope that it will be useful,
###    but WITHOUT ANY WARRANTY; without even the implied warranty of
###    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
###    GNU General Public License for more details.
###
###    You should have received a copy of the GNU General Public License
###    along with this program.  If not, see <http://www.gnu.org/licenses/>.

# gcustomiser - A visual customiser for the GNOME desktop using GTK+.

from gi.repository import Gtk
import sys

class gcustomiser:
    def __init__(self):
        ## Main window
        self.mainWindow = Gtk.Window(Gtk.WindowType.TOPLEVEL)
        self.mainWindow.set_size_request(512, -1)
        self.mainWindow.set_resizable(False)
        self.mainWindow.set_title("GNOME Customiser")
        self.mainWindow.connect("destroy", self.on_mainWindow_destroy)

        ## Main box
        self.mainWindow.mainBox = Gtk.VBox(
            homogeneous = False,
            spacing = 8)

        ## Toolbar
        self.mainWindow.mainBox.mainToolbar = Gtk.Toolbar()
        self.mainWindow.mainBox.mainToolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR)
        self.mainWindow.mainBox.mainToolbar.set_style(Gtk.ToolbarStyle.BOTH)

        ## Left toolbar separator
        self.mainWindow.mainBox.mainToolbar.leftSeparator = Gtk.SeparatorToolItem(draw = False)
        self.mainWindow.mainBox.mainToolbar.leftSeparator.set_expand(True)

        ## Overview toggle button
        self.mainWindow.mainBox.mainToolbar.overviewRadio = Gtk.RadioToolButton(Gtk.STOCK_ABOUT)
        self.mainWindow.mainBox.mainToolbar.overviewRadio.set_is_important(True)
        self.mainWindow.mainBox.mainToolbar.overviewRadio.set_label("Overview")
        self.mainWindow.mainBox.mainToolbar.overviewRadio.connect("clicked", self.on_overviewRadio_clicked)

        ## Basic settings toggle button
        self.mainWindow.mainBox.mainToolbar.basicRadio = Gtk.RadioToolButton(label = "Overview")
        self.mainWindow.mainBox.mainToolbar.basicRadio.set_label("Overview")
        a = self.mainWindow.mainBox.mainToolbar.basicRadio.get_label()
        print(a)
        ## Right toolbar separator
        self.mainWindow.mainBox.mainToolbar.rightSeparator = Gtk.SeparatorToolItem(
            draw = False)
        self.mainWindow.mainBox.mainToolbar.rightSeparator.set_expand(True)

        ## Add everything to self.mainWindow
        self.mainWindow.add(self.mainWindow.mainBox)

        self.mainWindow.mainBox.pack_start(
            self.mainWindow.mainBox.mainToolbar,
            expand = False,
            fill = True,
            padding = 0)

        self.mainWindow.mainBox.mainToolbar.add(self.mainWindow.mainBox.mainToolbar.leftSeparator)
        self.mainWindow.mainBox.mainToolbar.add(self.mainWindow.mainBox.mainToolbar.overviewRadio)
        self.mainWindow.mainBox.mainToolbar.add(self.mainWindow.mainBox.mainToolbar.rightSeparator)

    def on_mainWindow_destroy(self, *args):
        print("destroy: mainWindow")
        print("\nGoodbye.\n")

        Gtk.main_quit()

        sys.exit()

    def on_overviewRadio_clicked(self, *args):
        print("clicked: mainWindow.mainBox.mainToolbar.overviewRadio")

    def show_all(self):
        self.mainWindow.show_all()

window = gcustomiser()
window.show_all()

Gtk.main()

3 个答案:

答案 0 :(得分:1)

您可以使用:

self.mainWindow.mainBox.mainToolbar.overviewRadio.show_all()

虽然,您可能需要考虑:

self.mainWindow.show_all()

将显示mainWindow()中的每个小部件。通常在您定义主UI并希望使所有小部件可见之后使用。

答案 1 :(得分:0)

我建议您使用 Glade 界面编辑器,以一种非常简单的方式完成您想要的操作。 ToolButton 的标签是默认情况下可见的,只要小部件具有标签标签意味着它必须在图标下方显示文字,即便如此我们应该不再提供 show_label show_label ,而不是为gtk.RadioToolButton定义的函数。 此外,我建议你查看这些你可能有用的链接

  

http://valadoc.org/gtk+-3.0/Gtk.RadioToolButton.html.content.tpl%20   http://nullege.com/codes/search/gtk.RadioToolButton.set_label   http://pascal.rigaud4.free.fr/Programmation/GTK/GTKMMDoc/GTKMM/www.gtkmm.org/docs/gtkmm-2.4/docs/reference/html/classGtk_1_1RadioToolButton.html

答案 2 :(得分:0)

问题是我没有设置工具栏样式。要做到这一点,我应该使用:

self.mainWindow.mainBox.mainToolbar.set_style(Gtk.ToolbarStyle.*)

如果我希望标签显示在图标的侧面而不是图标的下方,我需要让无线电按钮变得重要:

self.mainWindow.mainBox.mainToolbar.set_style(Gtk.ToolbarStyle.BOTH_HORIZ)
self.mainWindow.mainBox.mainToolbar.overviewRadio.set_is_important(True)

有关Gtk.ToolbarStyle的列表,请在Python解释器中使用dir(Gtk.ToolbarStyle),或转到this page

相关问题