Seite 1 von 1

Glade und gtk.TreeView

Verfasst: Dienstag 29. März 2005, 19:51
von monocult
Hallo,

ich habe heute mal angefangen mich mit python und gtk zu befassen. Das klappte auch alles ganz gut bis ich mich an TreeView heran wagte.

Dabei möchte ich doch einfach nur eine Liste. :-(

Vielleicht könnt ihr mir ja ein kleines Beispiel geben wie ich Die in Glad erstellte Liste mit Inhalt fülle.

Gruß Daniel

Code: Alles auswählen

#!/usr/bin/env python

import gtk
import gtk.glade


class gui: 
	def __init__(self): 
		self.wTree=gtk.glade.XML ("cglade-out.glade") 
		self.wTree.signal_autoconnect(self)   
		
		self.wTree.get_widget("treeview2").set_model(model=gtk.ListStore(str, int, int))
		
		for i in range(100):
			print self.wTree.get_widget("treeview2").get_model()
			
			#an dieser stelle hab ich testweise versuch die Liste zu füllen
      

gui()
gtk.main()

Verfasst: Dienstag 29. März 2005, 20:07
von Leonidas
Guck dir mal seewhatsonair an, dort habe ich auch ein TreeView, kombiniert mit einem ListStore. Ist zwar ohne Glade, ist aber vom Konzept her das selbe. Und ja: TreeView in GTK sind kompliziert.

Verfasst: Mittwoch 30. März 2005, 10:27
von monocult
Danke das hat mir schon etwas geholfen.
Ich kann jetzt die Spalten anlegen, bekomme aber noch keine Row's hinzugefügt.

Code: Alles auswählen

#!/usr/bin/env python
import gtk
import gtk.glade

class gui: 
	def __init__(self): 
		self.wTree=gtk.glade.XML ("projekt2.glade")
		self.wTree.signal_autoconnect(self)
				
		model = gtk.ListStore(str, str, str, str)
		self.wTree.get_widget("treeview1").set_model(model)
		self.wTree.get_widget("treeview1").columns_autosize()
		
		for i in range(4):		
			renderer = gtk.CellRendererText()
			column = gtk.TreeViewColumn("Col-"+str(i), renderer, text=i)
			self.wTree.get_widget("treeview1").append_column(column)
	
	def gtk_main_quit(self,widget):
		gtk.main_quit()	
	
gui()
gtk.main()

Verfasst: Mittwoch 30. März 2005, 10:57
von Leonidas
Der Code der fürs füllen zuständig ist, ist dieser. self.model ist ein Liststore, 1 ist die Spalte und st.__station__ ist der Text der eingesetzt werden soll.

Code: Alles auswählen

iterator = self.model.append()
self.model.set_value(iterator, 1, st.__station__)

Verfasst: Mittwoch 30. März 2005, 14:04
von Gast
super es klappt jetzt alles :-) (naja zumindest sehr einfach).

Vielen dank für deine Hilfe und damit die anderen nicht so lange suchen müssen wie ich poste ich einfach mal hier das Test Gade und python File.

projekt2.glade

Code: Alles auswählen

<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">

<glade-interface>

<widget class="GtkWindow" id="window1">
  <property name="height_request">400</property>
  <property name="visible">True</property>
  <property name="title" translatable="yes">TreeView Test</property>
  <property name="type">GTK_WINDOW_TOPLEVEL</property>
  <property name="window_position">GTK_WIN_POS_CENTER</property>
  <property name="modal">False</property>
  <property name="resizable">True</property>
  <property name="destroy_with_parent">False</property>
  <property name="decorated">True</property>
  <property name="skip_taskbar_hint">False</property>
  <property name="skip_pager_hint">False</property>
  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
  <property name="focus_on_map">True</property>
  <signal name="destroy" handler="gtk_main_quit" last_modification_time="Wed, 30 Mar 2005 08:45:40 GMT"/>

  <child>
    <widget class="GtkScrolledWindow" id="scrolledwindow1">
      <property name="visible">True</property>
      <property name="can_focus">True</property>
      <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
      <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
      <property name="shadow_type">GTK_SHADOW_IN</property>
      <property name="window_placement">GTK_CORNER_TOP_LEFT</property>

      <child>
	<widget class="GtkTreeView" id="treeview1">
	  <property name="visible">True</property>
	  <property name="can_focus">True</property>
	  <property name="headers_visible">True</property>
	  <property name="rules_hint">True</property>
	  <property name="reorderable">True</property>
	  <property name="enable_search">True</property>
	  <property name="fixed_height_mode">False</property>
	  <property name="hover_selection">False</property>
	  <property name="hover_expand">False</property>
	  <signal name="row_activated" handler="on_treeview1_row_activated" last_modification_time="Wed, 30 Mar 2005 11:00:14 GMT"/>
	</widget>
      </child>
    </widget>
  </child>
</widget>

</glade-interface>

und

Code: Alles auswählen

#!/usr/bin/env python
import gtk
import gtk.glade

class gui: 
	def __init__(self): 
		self.wTree=gtk.glade.XML ("projekt2.glade")
		self.wTree.signal_autoconnect(self)
				
		self.model = gtk.ListStore(str, str, str, str)
		self.wTree.get_widget("treeview1").set_model(self.model)
		self.wTree.get_widget("treeview1").columns_autosize()
		
		for i in range(4):		
			renderer = gtk.CellRendererText()
			column = gtk.TreeViewColumn("Col-"+str(i), renderer, text=i)
			self.wTree.get_widget("treeview1").append_column(column)
		
		array=["col1","col2","col3","col4"]
		for ia in range(20):
			iterator = self.model.append()
			for ib in range(4):	
				self.model.set_value(iterator, ib, "Row"+str(ia)+" "+array[ib])
				print iterator
	
	def gtk_main_quit(self,widget):
		gtk.main_quit()	
	
	def on_treeview1_row_activated(self,widget,c,d):
		iterator = self.model.get_iter(c)
		for ib in range(4):	
				self.model.set_value(iterator, ib, "---")
			
		
		
gui()
gtk.main()