Fileopen Problem

Fragen zu Tkinter.
Antworten
edst66
User
Beiträge: 2
Registriert: Dienstag 5. Juni 2007, 15:03

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()
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

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... :?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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