Seite 1 von 1

Fileopen Problem

Verfasst: Dienstag 5. Juni 2007, 15:24
von edst66
Hallo,

Die fileopen1 und fileopen2 sind hier sehr ähnlich, wie kann ich die beide in einer Funktion schreiben, dann kann ich ca. 20 Zeilen sparen.

Danke!!!!!!!!!

Code: Alles auswählen

from Tkinter import *
import os
import string
from tkFileDialog import *
import sys

class fileopenprobe:
    
##Erste Funktion
    def fileopen1(self):
        """open a file to read"""
        pwd = os.getcwd()
        

        dir = "../models2/DATENBANK/mbs_db_substructure"
        mask = [("Substruktures","*.sys")]

        filename=askopenfilename(initialdir=dir, filetypes=mask)
        name = string.split(filename, '/')
        laenge = len(name)
        name = string.split(name[laenge-1], '.')[0]
       
        if filename != None:
            self.text1.delete(0.0, END)
            self.text1.insert(END, name)
##die Zweite Funktion unterscheidet sich mit der ersten nur bei text1
    def fileopen2(self):
        """open a file to read"""
        pwd = os.getcwd()
        

        dir = "../models2/DATENBANK/mbs_db_substructure"
        mask = [("Substruktures","*.sys")]

        filename=askopenfilename(initialdir=dir, filetypes=mask)
        name = string.split(filename, '/')
        laenge = len(name)
        name = string.split(name[laenge-1], '.')[0]
       
        if filename != None:
            self.text2.delete(0.0, END)
            self.text2.insert(END, name)

    def __init__(self):
        self.hf=Tk()
        self.hf.title("fileopen versuch")
        self.hf.geometry("1100x400")
        self.text1=Text(self.hf)
        self.text1.place(relx=0.42,rely=0.1,width=200,height=25,anchor="w")
        self.text2=Text(self.hf)
        self.text2.place(relx=0.42,rely=0.2,width=200,height=25,anchor="w")
        self.L1=Label(self.hf, text="Datei 1: ",font="Arial 10 bold", height="1")                    
        self.L1.place(relx=0.01, rely=0.1, anchor="w")

        self.b1=Button(self.hf, text="OPEN 1", command=self.fileopen1)
        self.b1.place(relx=0.33,rely=0.1,anchor="w")
                                                                                                                                            
        self.L2=Label(self.hf, text="Datei 2",font="Arial 10 bold", height="1")                    
        self.L2.place(relx=0.01, rely=0.2, anchor="w")

        self.b2=Button(self.hf, text="OPEN 2", command=self.fileopen2)
        self.b2.place(relx=0.33,rely=0.2,anchor="w")
        
        self.hf.mainloop()

fileopenprobe()

Verfasst: Dienstag 5. Juni 2007, 17:34
von schlangenbeschwörer
Hi,

Code: Alles auswählen

from Tkinter import *
Das ist ja so schön... :twisted:

Ausserdem solltest du die init als erstes in die Klasse packen.

Zu deiner Frage, uebergib das, was anders ist, einfach als Parameter der Methode! :wink:

Und nochwas, den mainloop schon in der init zu starten, find ich etwas komisch, denn es ist ja eine Klasse, die initialisiert wird...

Gruss, jj

ps, sorry, ich glaub, meine Tastatur hat sich grad auf englisch umgestellt... :?

Verfasst: Mittwoch 6. Juni 2007, 09:44
von EyDu

Code: Alles auswählen

    def fileopen(self, textfield): 
        """open a file to read""" 
        pwd = os.getcwd() 
        

        dir = "../models2/DATENBANK/mbs_db_substructure" 
        mask = [("Substruktures","*.sys")] 

        filename=askopenfilename(initialdir=dir, filetypes=mask) 
        name = string.split(filename, '/') 
        name = string.split(name[-1], '.')[0] 
        
        if filename != None: 
            textfield.delete(0.0, END) 
            textfield.insert(END, name) 
Die Arbeit mit den Dateinamen lässt sich noch verbessern, schau dir dazu mal das Modul "os.path" an. Außerdem solltest du die hart codierten String-"Konstanten" noch auslagern.