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

Sonntag 16. September 2018, 11:37

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: 3477
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sonntag 16. September 2018, 11:52

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

Sonntag 16. September 2018, 12:15

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: 3477
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sonntag 16. September 2018, 12:41

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

Sonntag 16. September 2018, 12:57

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: 1220
Registriert: Samstag 2. Juni 2018, 10:21

Sonntag 16. September 2018, 13:52

@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.
“Pets are always a great help in times of stress. And in times of starvation too, o'course.” — Terry Pratchett, Small Gods
__deets__
User
Beiträge: 3477
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sonntag 16. September 2018, 16:08

@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.
Antworten