Glade und gtk.TreeView

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
monocult

Dienstag 29. März 2005, 19:51

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()
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 29. März 2005, 20:07

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
monocult

Mittwoch 30. März 2005, 10:27

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()
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 30. März 2005, 10:57

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__)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Mittwoch 30. März 2005, 14:04

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