GtkEntry auslesen auf Knopfdruck

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
TimeMen
User
Beiträge: 55
Registriert: Samstag 24. Dezember 2016, 10:25
Wohnort: Deutschland

Hallo,
Folgendes Problem.
Ich habe ein GtkEntry und dahinter einen Button, der beim klicken den Inhalt des Entries auslesen soll.
Leider bekomme ich immer den Fehler, dass das Programm den GtkEntry nicht kennt.

Code: Alles auswählen

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GdkPixbuf, Gdk
from google_images_download import google_images_download as gid
responste = gid.googleimagesdownload()
import os, sys


#Comment the first line and uncomment the second before installing
#or making the tarball (alternatively, use project variables)
UI_FILE = "src/pygtk_foobar.ui"
#UI_FILE = "/usr/local/share/pygtk_foobar/ui/pygtk_foobar.ui"


class GUI:
	def __init__(self):
		# window initialization
		self.builder = Gtk.Builder()
		self.builder.add_from_file(UI_FILE)
		self.builder.connect_signals(self)
		window = self.builder.get_object('window')
		window.show_all()

		# data initialization
		

	def on_window_destroy(self, window):
		Gtk.main_quit()

	def app_overview(self, window):
		print("Overview")

	def app_back(self, window):
		print("Back")

	def app_save(self, window):
		print("Save")

	def app_forward(self, window):
		print("Forward")

	def app_search(self, window):
		print("Search")
		species = str(Tbo_Species.get_text())	<-- Hier muss der Fehler laut Fehlermeldung sein! (mit self.Tbo_Species geht es nicht).
		#arguments = {"keywords":
		print("Species:", species)

	def app_quit(self, window):
		Gtk.main_quit()

def main():
	app = GUI()
	Gtk.main()
		
if __name__ == "__main__":
	sys.exit(main())
Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/rtfm/pygtk-foobar/src/pygtk_foobar.py", line 63, in app_search
    species = str(Gtk.Tbo_Species.get_text())
  File "/usr/lib/python2.7/dist-packages/gi/overrides/__init__.py", line 39, in __getattr__
    return getattr(self._introspection_module, name)
  File "/usr/lib/python2.7/dist-packages/gi/module.py", line 137, in __getattr__
    self.__name__, name))
AttributeError: 'gi.repository.Gtk' object has no attribute 'Tbo_Species'
----------------------------------------------
Program exited with errcode (0)
Wo ich den Fehler vermute habe ich im Codesnippet gekennzeichnet, leider spuckt auch das Internet dazu wenig aus, bzw. schreibt mir vor es wie oben getan zu versuchen. Was mache ich denn hier falsch? Seit nunmehr 5 Stunden versuche ich herauszufinden wo mein Fehler ist, nur leider scheint mir Google nicht wohlgesonnen zu sein oder ich bin einfach zu blöd.

LG,
TimeMen
Eine Signatur ist ein Text, der an deine Nachrichten angefügt werden kann. Sie ist auf 300 Zeichen begrenzt.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Also zuerstmal passt der Code nicht zu Fehlermeldung. Das verwirrt unnoetig, und kann im schlimmsten Fall verhindern, dass man den Fehler findet.

Und jetzt schau mal in deinen eigenen Code. Da gibt es eine andere Stelle, an der du dich auf ein bestimmtes Widget beziehst. Und da steht auch, wie daran kommst. Das, was du da machst, musst du auch in deinem Callback machen.
TimeMen
User
Beiträge: 55
Registriert: Samstag 24. Dezember 2016, 10:25
Wohnort: Deutschland

Das ist exakt der Code den ich ausgeführt habe und die exakte Fehlermeldung dazu.
Was für ein bestimmtes Widget?

Meinst du das hier?

Code: Alles auswählen

		window = self.builder.get_object('window')
Eine Signatur ist ein Text, der an deine Nachrichten angefügt werden kann. Sie ist auf 300 Zeichen begrenzt.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es ist bestimmt nicht der Code, da fehlt ein Gtk im Code, das es im stacktrace gibt.

Und ja. So wie du an das window kommst, kommst du auch an Andere gui builder Widgets.
TimeMen
User
Beiträge: 55
Registriert: Samstag 24. Dezember 2016, 10:25
Wohnort: Deutschland

Dann probiere ich das so wie du sagst.
Allerdings kann ich dir gerne einen Beweis-Screenshot schicken, der dir zeigt, dass der Stacktrace und der Code zusammengehören.
Außerdem, was würde es bringen einen Code und den Stacktrace eines anderen Programms zu schicken?
Eine Signatur ist ein Text, der an deine Nachrichten angefügt werden kann. Sie ist auf 300 Zeichen begrenzt.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@TimeMen: Du kannst keinen Beweis-Screenshot schicken, denn wenn der genau das gleiche zeigt wie im ersten Beitrag, dann ist der ja offensichtlich manipuliert, denn Quelltext und Traceback passen nicht zusammen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

@TimeMan: das trace back & Code nicht passen ist keine Frage des Glaubens, sondern ein Fakt. Du zeigst Code der einen NameError werfen würde, aber einen AttributeError als Fehler. Du hast da beim rum probieren offensichtlich mehrere Dinge Probiert und dich dann verhaspelt. Kann ja passieren. Aber darauf zu beharren, das was wir sehen wahr ist - kA was das bringen soll.
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

Was ist den Tbo_Species und wo wird es definiert?

Also grundsätzlich würde ich vermuten, da muss, ähnlich wie bei dem window, das Entry erst holen und in der Funktion dann auslesen.:

self.entry = self.builder.get_object('entry')
self.entry.get_text()
Antworten