在python3+gtk3中获取文本

2024-09-30 22:22:08 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能是一个python3问题。 在下面的代码中,print(numele)工作正常,即connect函数{}正常。在

from gi.repository import Gtk, GObject

class EntryWindow(Gtk.Window):

  def __init__(self):
    Gtk.Window.__init__(self, title="Entry Demo")
    self.set_size_request(100, 50)

    grid=Gtk.Grid()
    self.add(grid)

#Create Entry nument
    self.nument = Gtk.Entry()
    self.numlab = Gtk.Label()
    self.numlab.set_text("Number Of Element")
    self.nument.set_text("Number Of Element")
    self.nument.set_editable("TRUE")
    grid.attach(self.numlab, 0,2,1,1)      
    grid.attach(self.nument, 1,2,1,1)      
#Connect Entry nument
    self.nument.connect("activate",self.get_nument)

#Create Entry from numele
    for i in range(1,numele+1):
      self.entry = Gtk.Entry()
      self.entry.set_text("Hello World")
      self.entry.set_editable("FALSE")
      grid.attach(self.entry, 0,2+i,1,1)


    def get_nument(self,entry):
      numele= self.nument.get_text()
      print(numele)

win = EntryWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

但是,在for loop中,它不能访问numele值。在

^{pr2}$

我是python新手。所以,我希望numele对函数get-nument是私有的。 在功能(即公共)之外使用它的最佳方式是什么?在

请帮忙。在

编辑:普托马托回复后 我试过了,用的是:

#Connect Entry nument
    self.nument.connect("activate",self.get_nument)
    print(self.numele)

并将函数定义为:

定义(自我,进入): self.numele=self.nument.get_文本()

只是有错误:

$ python3 test.py
Traceback (most recent call last):
  File "test.py", line 35, in <module>
    win = EntryWindow()
  File "test.py", line 21, in __init__
    self.nument.connect("activate",self.get_nument)
AttributeError: 'EntryWindow' object has no attribute 'get_nument'

Tags: 函数textselfgtkgetconnectwingrid
2条回答

你的想法完全正确。numele变量的作用域是局部的,因此它在函数末尾被删除。或者return函数中的值,或者存储它self.numele。将其存储在EntryWindow对象中,以便它在函数范围之外保持。在

在您可以在range()调用中使用它之前,您可能需要执行int(numele)操作。。。在

代码有几个错误,我不知道你想实现什么。 你可能想要一些Gtk.条目基于第一个条目的数字。因此,必须将for循环移到get_nument方法中。这仍将引发错误,因为get_nument缩进太多。此外,您需要从Gtk.入口一个整数。 {cdan>属性最后必须是可访问的。在

结果应该如下所示:

from gi.repository import Gtk, GObject

class EntryWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="Entry Demo")
        self.set_size_request(100, 50)

        self.grid=Gtk.Grid()
        self.add(self.grid)

        #Create Entry nument
        self.nument = Gtk.Entry()
        self.numlab = Gtk.Label()
        self.numlab.set_text("Number Of Element")
        self.nument.set_editable("TRUE")
        self.grid.attach(self.numlab, 0,2,1,1)
        self.grid.attach(self.nument, 1,2,1,1)
        #Connect Entry nument
        self.nument.connect("activate",self.get_nument)



    def get_nument(self,entry):
        numele= self.nument.get_text()
        print(numele)
        #Create Entry from numele
        for i in range(1,int(numele)+1):
            entry = Gtk.Entry()
            entry.set_text("Hello World")
            entry.set_editable("FALSE")
            entry.show()
            self.grid.attach(entry, 0,2+i,1,1)

win = EntryWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

此代码仍然存在问题,例如,如果输入的数字较低,则不会从网格中删除条目。在

相关问题 更多 >