Guten Abend oder guten Morgen,
ich habe ein Programm mit einer Klasse die mehrere Funktionen enthält. Diese Funktionen definiere ich mit def funktion(self, widget). Aufgerufen werden die Funktionen aus dem Hauptprogramm (def __init__(self):) mit self.funktion(). Möchte ich nun aus einer dieser Funktionen eine andere aufrufen, bekomme ich die Meldung, dass ein Parameter zu wenig übergeben wurde.
Ist dies nun self oder widget? Und wie kann ich das Problem verhindern? Ich kann eine leere Variabel mitgeben, also ist es wohl widget. So funktioniert es auch, aber schön ist das nicht. Und vor allem auch nicht richtig. Aber ich tue mich bei diesem Thema noch etwas schwer (Klassen).
Freue mich wie immer über Hilfe und Kommentare zu dem Thema. Danke
Aus einer Funktion eine andere aufrufen, GTK widget
- diesch
- User
- Beiträge: 80
- Registriert: Dienstag 14. April 2009, 13:36
- Wohnort: Brandenburg a.d. Havel
- Kontaktdaten:
Wenn du eine Methode mit
definierst, musst du sie mit
aufrufen.
Als ersten Parameter bekommen Methoden immer "automagisch" die zugehörige Instanz oder Klasse übergeben, alle anderen Parameter musst du selbst angeben.
"widget" ist ein ganz normaler Parameter. Wenn deine Methode ihn nicht benötigt und keine Methode überschreibt, die ihn benötigt , kannst du ihn bei der Definition der Methode einfach weglassen.
Code: Alles auswählen
def funktion(self, widget)
Code: Alles auswählen
self.funktion(widget)
Als ersten Parameter bekommen Methoden immer "automagisch" die zugehörige Instanz oder Klasse übergeben, alle anderen Parameter musst du selbst angeben.
"widget" ist ein ganz normaler Parameter. Wenn deine Methode ihn nicht benötigt und keine Methode überschreibt, die ihn benötigt , kannst du ihn bei der Definition der Methode einfach weglassen.
http://www.florian-diesch.de
@martinjo: Ich nehme mal an Du hast das `widget`-Argument da weil Du es zwar nicht benutzt, aber andere es Dir unbedingt übergeben wollen, also zum Beispiel Rückrufe aus der GUI. Dann kannst Du einfach `None` als Default-Wert definieren:
Den Unterstrich mache ich immer bei Argumenten die ich nicht verwende, die aber da sein müssen weil eine API das so vorgibt.
Du redest immer von Funktionen: Wenn das wirklich Funktionen sind, dann gehören sie nicht in eine Klasse.
Code: Alles auswählen
def methode(self, _widget=None):
Du redest immer von Funktionen: Wenn das wirklich Funktionen sind, dann gehören sie nicht in eine Klasse.
Danke für die Antworten. @BlackHack, genau dass ist mein Problem gewesen.
Ich sende anbei noch den Code (teilweise) des Programms zu, daraus lassen sich wohl eher Rückschlüsse ableiten. Ich prüfe mit dem Progamm ob der Artikel in der Warenwirtschaft vorhanden ist (erp_search), wenn nicht kann ich diesen direkt aus dem Programm erstellen lassen (export2erp). Nun soll direkt nach dem Import nochmals geprüft werden, ob der Artikel nun vorhanden ist.
Ich sende anbei noch den Code (teilweise) des Programms zu, daraus lassen sich wohl eher Rückschlüsse ableiten. Ich prüfe mit dem Progamm ob der Artikel in der Warenwirtschaft vorhanden ist (erp_search), wenn nicht kann ich diesen direkt aus dem Programm erstellen lassen (export2erp). Nun soll direkt nach dem Import nochmals geprüft werden, ob der Artikel nun vorhanden ist.
Code: Alles auswählen
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import gtk
import sys
import time
import webbrowser
import subprocess
from decimal import *
from erp_con import Model
from urllib2 import urlopen
#import and check epr tool
#Basisklasse
class Base:
# definiert das beenden
def destroy(selb, widget, data=None):
print "You Clicked the Close Button"
gtk.main_quit()
def erp_search(self, _widget=None):
print "prüft ob Artikel in Warenwitschaft vorhanden ist."
pass
def export2erp(self, widget):
name = self.product_name
code = self.product_number
Product = Model.get('product_product')
product = Product()
product.name = name
product.code = code
product.save()
self.result_info_text.set_text("Exported to erp...")
self.result_info_text.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#00b400'))
self.erp_search()
def __init__(self):
#define windows
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_position(gtk.WIN_POS_CENTER)
self.window.set_size_request(770, 570)
self.window.set_title("product Parts Search Tool")
#search entry and button
self.search_entry_box = gtk.HBox()
self.searchentry = gtk.Entry()
self.searchentry.connect("activate", self.searchfunktion)
self.search_entry_box.pack_start(self.searchentry)
searchbutton = gtk.Button(" Search ")
searchbutton.connect("clicked", self.searchfunktion)
self.search_entry_box.pack_start(searchbutton, expand=False)
#Exit Button
self.exitbutton = gtk.Button(stock = gtk.STOCK_QUIT)
self.exitbutton.connect("clicked", self.destroy)
self.exitbutton.set_tooltip_text("This is QUIT")
#Product Name
self.product_name_entry = gtk.Entry()
self.product_name_entry.set_tooltip_text("Product Name")
#Product Description
self.scrolled_window_productinfo = gtk.ScrolledWindow(hadjustment=None, vadjustment=None)
self.textview_productinfo = gtk.TextView()
self.textview_productinfo.set_tooltip_text("Product Description")
self.textbuffer_product_info = self.textview_productinfo.get_buffer()
self.scrolled_window_productinfo.add_with_viewport(self.textview_productinfo)
##Search Button Box
self.searchbuttonbox_h = gtk.HBox(homogeneous=True)
searchbuttonbox_v = gtk.VBox()
searchbuttonbox1_erpbutton = gtk.Button("Check erp")
searchbuttonbox1_erpbutton.connect("clicked", self.erp_search)
self.searchbuttonbox1_erp_count = gtk.Entry()
self.searchbuttonbox1_erp_count.set_editable(False)
searchbuttonbox_v.pack_start(searchbuttonbox1_erpbutton)
searchbuttonbox_v.pack_start(self.searchbuttonbox1_erp_count)
self.searchbuttonbox_h.pack_start(searchbuttonbox_v)
#Bereich (Box) festlegen und Inhalte festlegen
self.box1 = gtk.VBox()
self.box1.pack_start(self.search_entry_box, expand=False)
self.box1.pack_start(self.product_name_entry, expand=False)
self.box1.pack_start(self.scrolled_window_productinfo, expand=True)
self.box1.pack_start(self.searchbuttonbox_h, expand=False)
self.box1.pack_start(self.exitbutton, expand=False)
#Box zum Hauptfenster hinzufügen und anzeigen
self.window.add(self.box1)
self.window.show_all()
#schließen Knopf mit beenden Funktion verbinden
self.window.connect("destroy", self.destroy)
def main(self):
gtk.main()
if __name__ == "__main__":
base = Base()
base.main()