我想Gtk.TreeView
在按下按鈕時選擇第一行。我知道這可以使用row_activated
,但是row_activated
需要 aGtk.TreePath
和 a Gtk.TreeViewColumn
(我假設可以設定為None
)。問題是我不知道如何獲得Gtk.TreePath
第一行的。
class Main(Gtk.Window):
def __init__(self):
super().__init__()
liststore = Gtk.ListStore(str)
liststore.append(['first_entry'])
liststore.append(['second_entry'])
liststore.append(['third_entry'])
treeview = Gtk.TreeView()
treeview.set_model(liststore)
renderer = Gtk.CellRendererText()
column = Gtk.TreeViewColumn('Item', renderer, text=0)
treeview.append_column(column)
button = Gtk.Button(label='button')
box = Gtk.Box()
box.set_orientation(Gtk.Orientation.VERTICAL)
box.add(button)
box.add(treeview)
self.add(box)
if __name__ == '__main__':
main = Main()
main.show_all()
Gtk.main()
在這種情況下,當按下按鈕時,我希望first_entry
(這是第一行)被選中
uj5u.com熱心網友回復:
我發現treeview.set_cursor(0)
有問題:Python GTK: How to set a selected row on gtk.treeview - Stack Overflow,我認為它可能是更好的解決方案。
順便說一句:您必須使用按鈕執行的功能self.
來訪問treeview
。
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class Main(Gtk.Window):
def __init__(self):
super().__init__()
liststore = Gtk.ListStore(str)
liststore.append(['first_entry'])
liststore.append(['second_entry'])
liststore.append(['third_entry'])
self.treeview = Gtk.TreeView()
self.treeview.set_model(liststore)
renderer = Gtk.CellRendererText()
column = Gtk.TreeViewColumn('Item', renderer, text=0)
self.treeview.append_column(column)
button = Gtk.Button(label='button')
button.connect('clicked', self.select_first)
box = Gtk.Box()
box.set_orientation(Gtk.Orientation.VERTICAL)
box.add(button)
box.add(self.treeview)
self.add(box)
def select_first(self, event):
self.treeview.set_cursor(0)
if __name__ == '__main__':
main = Main()
main.show_all()
Gtk.main()
用于 C/C 的set_cursor()的檔案(但可能很有用)。
似乎原始set_cursor()
也需要TreePath
,但在 Python 中它適用于index
. 其他功能不必使用,index
而不是TreePath
編輯:
我發現您可以TreePath
使用index
- aslist
或string
def select_first(self, event):
path = Gtk.TreePath.new_from_indices([0]) # it needs list because trees can be nestes, ie. [0,5,3]
#path = Gtk.TreePath.new_from_string("0") # for nested trees it can be ie. "0:5:3"
selection = self.treeview.get_selection()
selection.select_path(path)
編輯:
如果您self.
在創建時使用,self.column = Gtk.TreeViewColumn('Item', renderer, text=0)
那么您可以使用它,row_activated()
但這不會在我的計算機上選擇行(但不會引發錯誤)
def select_first(self, event):
path = Gtk.TreePath.new_from_indices([0])
self.treeview.row_activated(path, self.column)
我用于測驗的完整代碼:
# https://lazka.github.io/pgi-docs/Gtk-3.0/classes/TreeSelection.html#gtk-treeselection
# https://lazka.github.io/pgi-docs/Gtk-3.0/classes/TreePath.html#Gtk.TreePath.new_from_indices
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class Main(Gtk.Window):
def __init__(self):
super().__init__()
self.connect("destroy", Gtk.main_quit)
liststore = Gtk.ListStore(str)
liststore.append(['first_entry'])
liststore.append(['second_entry'])
liststore.append(['third_entry'])
self.treeview = Gtk.TreeView()
self.treeview.set_model(liststore)
renderer = Gtk.CellRendererText()
self.column = Gtk.TreeViewColumn('Item', renderer, text=0)
self.treeview.append_column(self.column)
button1 = Gtk.Button(label='First')
button1.connect('clicked', self.select_first)
button2 = Gtk.Button(label='Second')
button2.connect('clicked', self.select_second)
button3 = Gtk.Button(label='Third')
button3.connect('clicked', self.select_third)
box = Gtk.Box()
box.set_orientation(Gtk.Orientation.VERTICAL)
box.add(button1)
box.add(button2)
box.add(button3)
box.add(self.treeview)
self.add(box)
def select_first(self, event):
self.treeview.set_cursor(0)
def select_second(self, event):
path = Gtk.TreePath.new_from_indices([1]) # it needs list because trees can be nestes, ie. [0,5,3]
path = Gtk.TreePath.new_from_string("1") # for nested trees it can be ie. "0:5:3"
selection = self.treeview.get_selection()
selection.select_path(path)
def select_third(self, event):
path = Gtk.TreePath.new_from_indices([2]) # it needs list because trees can be nestes, ie. [0,5,3]
self.treeview.row_activated(path, self.column)
if __name__ == '__main__':
main = Main()
main.show_all()
Gtk.main()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/507959.html