在Glade和Python中为GtkFileChooser按钮实现get_filename()方法的问题?

0 投票
1 回答
947 浏览
提问于 2025-04-16 12:10

作为一个新手,我正在尝试使用Glade和Python创建一个基本的主题安装程序。一切都运行得很好,但我找不到任何地方说明如何使用gtkFileChooserButton的get_filename()方法。

我的Glade文件看起来是这样的。

<?xml version="1.0"?>
<interface>
  <requires lib="gtk+" version="2.16"/>
  <!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="main">
<property name="title" translatable="yes">Maininin</property>
<property name="window_position">center</property>
<signal name="destroy" handler="on_main_destroy"/>
<child>
  <object class="GtkVBox" id="vbox1">
    <property name="visible">True</property>
    <child>
      <object class="GtkLabel" id="INFO">
        <property name="visible">True</property>
        <property name="label" translatable="yes">Theme</property>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="padding">28</property>
        <property name="position">0</property>
      </packing>
    </child>
    <child>
      <object class="GtkHButtonBox" id="hbuttonbox1">
        <property name="visible">True</property>
        <property name="layout_style">spread</property>
        <child>
          <object class="GtkFileChooserButton" id="DD">
            <property name="visible">True</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">False</property>
            <property name="pack_type">end</property>
            <property name="position">0</property>
          </packing>
        </child>
      </object>
      <packing>
        <property name="position">1</property>
      </packing>
    </child>
    <child>
      <object class="GtkHButtonBox" id="hbuttonbox2">
        <property name="visible">True</property>
        <property name="layout_style">spread</property>
        <child>
          <object class="GtkButton" id="Add">
            <property name="label">gtk-add</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <property name="use_stock">True</property>
            <signal name="clicked" handler="on_Add_clicked"/>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">False</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkButton" id="Quit">
            <property name="label">gtk-quit</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <property name="use_stock">True</property>
            <signal name="clicked" handler="on_Quit_clicked"/>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">False</property>
            <property name="pack_type">end</property>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
      <packing>
        <property name="position">2</property>
      </packing>
    </child>
    <child>
      <object class="GtkLabel" id="WARN">
        <property name="visible">True</property>
        <property name="label" translatable="yes">Warning</property>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="padding">37</property>
        <property name="position">3</property>
      </packing>
    </child>
  </object>
</child>

而Python代码是:

import sys
try:  
import pygtk  
pygtk.require("2.0")  
except:  
pass  
try:  
import gtk   
except:  
print("GTK Not Availible")
sys.exit(1)


class workplz(object):


def __init__( self ):
    builder = gtk.Builder()
    builder.add_from_file("heme.glade")
    builder.connect_signals({"on_main_destroy" : self.quit, "on_Add_clicked" : self.add, "on_Quit_clicked" : self.quit})
    self._window = builder.get_object("main")
    self._window.show()     

def add(self, widget):
    target=DD.get_filename()
    print target


def quit(self, widget):
    sys.exit(0)


if __name__ == "__main__":
    wine = workplz()
    gtk.main()

这样做的正确方法是什么呢???

1 个回答

0

我觉得如果你从构建器中获取你的 GtkFileChooserButton 对象,并把它作为 workplz 类的一个成员保存下来,你就可以在 add 信号处理函数中查询它。看看下面的代码是否对你有用:

class workplz(object):
    def __init__( self ):
        builder = gtk.Builder()
        builder.add_from_file("heme.glade")
        builder.connect_signals({"on_main_destroy" : self.quit, "on_Add_clicked" : self.add, "on_Quit_clicked" : self.quit})

        # get GtkFileChooserButton object 
        self.DD = builder.get_object('DD')

        self._window = builder.get_object("main")
        self._window.show()     

    def add(self, widget):
        target = self.DD.get_filename()
        print target

    def quit(self, widget):
        sys.exit(0)

希望这能帮到你,祝好!

撰写回答