ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python-PyGtk-TreeView和选定的行

2019-10-23 23:06:26  阅读:251  来源: 互联网

标签:gtk gtktreeview pygtk python


我有一个TreeView,单击它时收到错误消息:

Traceback (most recent call last):
  File "pyparty.py", line 76, in get_selected_user
    self.selected_user = tree_model.get_value(tree_iter, 0)
TypeError: iter must be a GtkTreeIter

只是第一次点击就发生了.之后,它工作正常.我不知道怎么了
这是代码:

#! /usr/bin/python

import gtk
import pygtk
pygtk.require('2.0')
import os
import add_user
import user_commands_wrapper

class PyParty:
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_title('PyParty')
        self.window.set_position(gtk.WIN_POS_CENTER)
        self.window.set_border_width(5)

        self.window.connect('delete_event', self.closeWindow)

        self.table = gtk.Table(5, 2, False)

        self.title_label = gtk.Label('Users')
        self.add_button = gtk.Button('Add')
        self.edit_button = gtk.Button('Edit')
        self.delete_button = gtk.Button('Delete')
        self.exit_button = gtk.Button('Exit')

        self.add_button.connect('clicked', self.addUser)

        self.tree_store = gtk.TreeStore(str, str)

        #Remover passagem de valores para o construtor
        for user in user_commands_wrapper.User('', '').get_all_users():
            self.tree_store.append(None, [user.pw_name, user.pw_gecos])

        self.tree_view = gtk.TreeView(self.tree_store)
        self.tree_view.connect('button_press_event', self.get_selected_user)

        self.username_tree_view_column = gtk.TreeViewColumn('username')
        self.realname_tree_view_column = gtk.TreeViewColumn('realname')

        self.tree_view.append_column(self.username_tree_view_column)
        self.tree_view.append_column(self.realname_tree_view_column)

        self.username_cell = gtk.CellRendererText()
        self.username_tree_view_column.pack_start(self.username_cell, True)
        self.username_tree_view_column.add_attribute(self.username_cell, 'text', 0)

        self.realname_cell = gtk.CellRendererText()
        self.realname_tree_view_column.pack_start(self.realname_cell, True)
        self.realname_tree_view_column.add_attribute(self.realname_cell, 'text', 1)

        self.table.attach(self.title_label, 0, 2, 0, 1)
        self.table.attach(self.tree_view, 0, 1, 1, 5)
        self.table.attach(self.add_button, 1, 2, 1, 2)
        self.table.attach(self.edit_button, 1, 2, 2, 3)
        self.table.attach(self.delete_button, 1, 2, 3, 4)
        self.table.attach(self.exit_button, 1, 2, 4, 5)

        self.window.add(self.table)

        self.window.show_all()
        gtk.main()

    # Callback methods
    def closeWindow(self, widget, data = None):
        print self.selected_user
        gtk.main_quit()

    def addUser(self, widget, data = None):
        add_user.AddUser()

    def get_selected_user(self, widget, data = None):
        selection = self.tree_view.get_selection()
        selection.set_mode(gtk.SELECTION_SINGLE)
        tree_model, tree_iter = selection.get_selected()
        self.selected_user = tree_model.get_value(tree_iter, 0)

if __name__ == '__main__':
    # Remover
    if os.getenv('USER') == 'root':
        PyParty()
    else:
        print 'Only root can run that!'

解决方法:

我使用了错误的信号.这是正确的:

self.tree_view.connect('cursor-changed', self.get_selected_user)

谢谢

标签:gtk,gtktreeview,pygtk,python
来源: https://codeday.me/bug/20191023/1916284.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有