簡體   English   中英

在python3 + gtk3中獲取文本

[英]get text in python3+gtk3

這可能更多是python3問題和gtk3問題。 在下面的代碼中,print(numele)正常工作,即connect函數self.nument.connect("activate",self.get_nument)正常。

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值。

 $python3 hw3.py 
Traceback (most recent call last):
  File "hw3.py", line 35, in <module>
    win = EntryWindow()
  File "hw3.py", line 24, in __init__
    for i in range(1,numele+1):
NameError: global name 'numele' is not defined

我是python的新手。 因此,我希望numele對於get_nument函數是私有的。 在功能(即公共)之外使用它的最佳方法是什么?

請幫助。

編輯:在ptomato的回復之后,我嘗試了以下操作:

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

並將函數定義為:

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

只是有錯誤:

$ 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'

您的想法完全正確。 numele變量是局部作用域的,因此在函數末尾將其刪除。 從函數中return值,或者將其存儲為self.numele 它將其存儲在EntryWindow對象中,以便其持久存在,超出函數的范圍。

PS。 您可能需要先進行int(numele)才能在range()調用中使用它...

該代碼有幾個錯誤,我不確定您要實現什么。 您可能想根據第一個條目中的數字創建一些Gtk.Entries。 因此,您必須將for循環移到get_nument方法中。 這仍然會引發錯誤,因為get_nument縮進過多。 此外,您需要將字符串從Gtk.Entry轉換為整數。 最后,網格必須是get_nument可以訪問的屬性。

結果應如下所示:

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

此代碼仍然有問題,例如,如果輸入的數字較小,則不會從網格中刪除條目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM