我在 PyGtk 中創建了顯示名稱串列的簡單代碼。單擊更新按鈕后,將更新名稱串列。不幸的是,我無法擺脫單擊“更新”按鈕后出現的“最近一次通話”錯誤。任何人都可以就這個問題給我建議嗎?這可能是“#select and row”下的一行代碼的問題。
編輯: 腳本回傳錯誤訊息:
Traceback (most recent call last): File "/home/radek/Desktop/stackowr1.py", line 18, in choiceRow line = model[treeiter][0] File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 849, in __getitem__ aiter = self._getiter(key) File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 837, in _getiter aiter = self.get_iter(key) File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 871, in get_iter path = self._coerce_path(path) File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 846, in _coerce_path return TreePath(path) File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 1210, in __new__ path = ":".join(str(val) for val in path) TypeError: 'NoneType' object is not iterable
我的代碼:
```python
# -*- coding: utf-8 -*-
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class MyWindow(Gtk.Window):
def __init__(self):
super(MyWindow, self).__init__()
self.set_border_width(3)
self.set_default_size(800, 600)
self.name1 = "John"
self.name2 = "George"
def choiceRow(selection):
model, treeiter = selection.get_selected()
line = model[treeiter][0]
print(line)
def update_name(self):
self.name1 = "Jeane"
self.name2 = "Margot"
print(self.name1, self.name2)
win.liststore.clear()
win.liststore.append([self.name1])
win.liststore.append([self.name2])
button = Gtk.Button(label = "Update")
button.connect("clicked", update_name)
self.layout = Gtk.Layout()
self.tree = Gtk.TreeView()
self.liststore = Gtk.ListStore(str)
self.tree.set_model(self.liststore)
self.liststore.append([self.name1])
self.liststore.append([self.name2])
render = Gtk.CellRendererText()
self.column = Gtk.TreeViewColumn("ID", render, text=0)
self.tree.append_column(self.column)
# select a row
selectetRow = self.tree.get_selection()
selectetRow.connect("changed", choiceRow)
self.layout.put(self.tree, 0,0)
self.layout.put(button, 0,100)
self.add(self.layout)
win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
uj5u.com熱心網友回復:
Gtk.TreeSelection.get_selected在未選擇任何內容時回傳None,在更新呼叫之后沒有選擇任何內容,因此您獲得None并treeiter嘗試訪問model[None][0]顯然必須失敗的訪問。您需要iter在嘗試使用它之前檢查回傳是否有效,所以只需將您的choiceRow函式更改為
def choiceRow(selection):
model, treeiter = selection.get_selected()
if treeiter:
line = model[treeiter][0]
print(line)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/456502.html
標籤:python-3.x 用户界面 gtk pygtk
