【问题标题】:How to update image in gtk.Button with GTK#如何使用 GTK# 更新 gtk.Button 中的图像#
【发布时间】:2010-06-22 06:48:14
【问题描述】:

嗯,我正在开发一个简单的应用程序,用于在单声道中启动/停止和重新启动我的 LAMP(只是为了更多地了解单声道的 GUI 开发),所以为了减少按钮,我决定使用一个按钮来启动和停止服务器。在 GUI 设计器中我添加了一个带图标的开始按钮,问题是更新按钮标签很容易,但是将图像更改为 Stock.MediaStop 有点问题。那么如何在单击事件的按钮中更改库存图像(它不会测量它实际上是什么类型的事件)。这里有一些代码: 按钮的 GUI XML:

<widget class="Gtk.Button" id="button1">
       <property name="MemberName" />
       <property name="CanFocus">True</property>
       <property name="Type">TextAndIcon</property>
       <property name="Icon">stock:gtk-media-play Menu</property>
       <property name="Label" translatable="yes">Start</property>
       <property name="UseUnderline">True</property>
       <signal name="Clicked" handler="OnMysqlServerStartStop" />
</widget>

以及 MediaDevelop 如何使用自定义文本制作 Stock 按钮:

// Container child hbox1.Gtk.Box+BoxChild
        this.hbuttonbox1 = new Gtk.HButtonBox();
        this.hbuttonbox1.Name = "hbuttonbox1";
        // Container child hbuttonbox1.Gtk.ButtonBox+ButtonBoxChild
        this.button1 = new Gtk.Button();
        this.button1.CanFocus = true;
        this.button1.Name = "button1";
        this.button1.UseUnderline = true;
        // Container child button1.Gtk.Container+ContainerChild
        Gtk.Alignment w2 = new Gtk.Alignment(0.5F, 0.5F, 0F, 0F);
        // Container child GtkAlignment.Gtk.Container+ContainerChild
        Gtk.HBox w3 = new Gtk.HBox();
        w3.Spacing = 2;
        // Container child GtkHBox.Gtk.Container+ContainerChild
        Gtk.Image w4 = new Gtk.Image();
        w4.Pixbuf = Stetic.IconLoader.LoadIcon(this, "gtk-media-play", Gtk.IconSize.Menu, 16);
        w3.Add(w4);
        // Container child GtkHBox.Gtk.Container+ContainerChild
        Gtk.Label w6 = new Gtk.Label();
        w6.LabelProp = Mono.Unix.Catalog.GetString("Start");
        w6.UseUnderline = true;
        w3.Add(w6);
        w2.Add(w3);
        this.button1.Add(w2);
        this.hbuttonbox1.Add(this.button1);

【问题讨论】:

    标签: c# button icons gtk# stock


    【解决方案1】:

    我明白你为什么在这里遇到这么多麻烦。我以为你可以只设置按钮的图像和文本属性,但似乎你可以显示标签或显示图像,但不能同时显示。标签覆盖图像。我认为只有在主题设置要求时才会显示图像。这同样适用于标签。您可以将两者结合使用,仅使用标签或仅使用图像。全部由您使用的主题设置。

    你在正确的轨道上,这个示例代码应该回答你的查询。

    using System;
    using Gtk;
    
    namespace TogglePlay
    {
        public class MainClass
        {
            private bool stop = false;
            private Image image;
            private Label label;
    
            public MainClass ()
            {
                Button button = new Button();
                VBox box = new VBox();
                image = new Image(Stock.MediaPlay, IconSize.Button);
                box.PackStart(image, true, true, 0);
                label = new Label("Start");
                box.PackStart(label, true, true, 0);
                button.Add(box);
                button.Clicked += OnButtonClicked;
                Window window = new Window("LAMP light");
                window.Add(button);
                window.DeleteEvent += DeleteWindow;
                window.ShowAll();
            }
    
    
            private void DeleteWindow(object obj, DeleteEventArgs args)
            {
                Gtk.Application.Quit();
            }
    
            public void OnButtonClicked(object widget, EventArgs args)
            {
                if (!stop) {
                    stop = true;
                    image.Stock = Stock.MediaStop;
                    label.Text = "Stop";
                } else {
                    stop = false;
                    image.Stock = Stock.MediaPlay;
                    label.Text = "Start";
                }
            }
    
    
            public static void Main(String[] args)
            {
                Gtk.Application.Init ();
                MainClass mainClass = new MainClass();
                Gtk.Application.Run ();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      相关资源
      最近更新 更多