Wildcard für Filedialog

Plattformunabhängige GUIs mit wxWidgets.
Antworten
phill
User
Beiträge: 34
Registriert: Donnerstag 21. Mai 2009, 12:04
Kontaktdaten:

Hey...


ich schreibe gerade an einem Viewer für bakterielle Genome. Da meine Kollegen in der Biologie alles Macs benutzen wir hier in der BioInfo aber Linux bzw Windows hab ich mal eine frage.

Die Wildcard für den File-Dialog sehen bis jetzt z.B.so aus:

Code: Alles auswählen

    def OnOpenPttAnnotation(self, event):
        if os.platform == "win32":
            wildcard=""
        else:
            wildcard="*"


        dialog = wx.FileDialog(None, "Choose an annotation-file", os.getcwd(),
                               "", wildcard, wx.OPEN)
        if dialog.ShowModal() == wx.ID_OK:
            ptt = Imports.Ptt()
            ptt.importptt(dialog.GetPath())
            dialog.Destroy()

Nun die Frage gibt es eine elegantere Lösung die Wildcards os spezifisch zu setzen ausser die abfrage zu beginn?


grüße
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Hmm, wenn du das überhaupt weglässt, müsste er ja standardmässig alle Files anzeigen, oder?

Code: Alles auswählen

dialog = wx.FileDialog(None, "Choose an annotation-file", oc.getcwd(), style=wx.OPEN)
phill
User
Beiträge: 34
Registriert: Donnerstag 21. Mai 2009, 12:04
Kontaktdaten:

ja das schon nur in einer Bank von über 1000 files dann genau die zu finden die man gerade haben will... ich weiss es ist nur "ich mach es den usern so bequem wie möglich" aber ich will meine kollegen ja nicht im stich lassen!

also fällt dir / euch auch nix besseres ein?
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Aber mit dem Wildcard "" oder "*" machst du doch auch nichts anderes alles alle Dateien anzeigen zu lassen?
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Rebecca hat geschrieben:Aber mit dem Wildcard "" oder "*" machst du doch auch nichts anderes alles alle Dateien anzeigen zu lassen?
Eben, so habe ich das auch verstanden. Wenn schon, dann müsste er *.<ext> angeben (etwa in der Art: "Python Source (*.py *.pyw)|*.py;*.pyw")
phill
User
Beiträge: 34
Registriert: Donnerstag 21. Mai 2009, 12:04
Kontaktdaten:

yop... stimmt wohl... ich glaube da habe ich mich falsch ausgedrückt. im moment ist es noch egal das ich "" und "*" benutze da ich eh nur die 10 beispiel datein hier auf dem rechner liegen habe. wenn es aber mal dem ende zugeht müssen die wildcards noch geändert werden. nun ist das problem mit der Systemkompabilität aber jetzt schon bei den äußerst allgemeinen wildcards aufgetreten deswegen wollte ich fragen obs nicht eine elegantere lösung gibt.



aber mal ne ganz andere frage...

wieso zur hölle compiliert das nicht durch:

Code: Alles auswählen

import wx

class CheckBoxFrame(object):
    def __init__(self):
        wx.Frame.__init__(self , None,-1,"Selection View", size = (200,150))
        panel = wx.Panel(self,-1)
        wx.CheckBox(panel, -1, "CDS", (50,55),(175,30))
        wx.CheckBox(panel, -1, "Gene", (60,55),(175,30))
        wx.CheckBox(panel, -1, "repeat region", (70,55),(175,30))
        wx.CheckBox(panel, -1, "Zusatz", (80,55),(175,30))




if __name__ == "__main__":
    app = wx.PySimpleApp()
    CheckBoxFrame().Show()
    app.MainLoop()
sondern schmeisst den fehler:
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Phil\workspace\GenomeViewer\src\CheckBoxFrame.py", line 17, in <module>
CheckBoxFrame().Show()
File "C:\Dokumente und Einstellungen\Phil\workspace\GenomeViewer\src\CheckBoxFrame.py", line 5, in __init__
wx.Frame.__init__(self , None,-1,"Selection View", size = (200,150))
TypeError: unbound method __init__() must be called with Frame instance as first argument (got CheckBoxFrame instance instead)



ich verstehe nich wieso das ne CheckBox Frame instance sein soll, ich gebe doch deutlich zu erkennen das es enen frame ist und zwar hier:

Code: Alles auswählen

wx.Frame.__init__(self , None,-1,"Selection View", size = (200,150))

oder nicht???


gruß
BlackJack

@phill: Die Probleme entstehen wohl nicht *schon* bei dem allgemeinsten Fall, sondern *nur* da. Denn soweit ich weiss ist '*.ext' bei allen drei Plattformen die Art "alle Dateien mit der Erweiterung `.ext`" auszudrücken.

Bei dem Aufruf der `wx.Frame.__init__()` gibst Du `self` als erstes Argument an, und das muss vom Typ `wx.Frame` sein, und nicht vom Typ `object`. Welchen (Basis)Typ ein Objekt hat gibt man bei der `class`-Anweisung an.

Wenn ich eine Funktion aufrufe, die bei einem Argument erwartet, dass dies von einem bestimmten Typ ist, dann ändert dieser Aufruf doch nicht den Typ des Arguments, sondern das Argument muss vorher schon von eben diesem Typ sein.
phill
User
Beiträge: 34
Registriert: Donnerstag 21. Mai 2009, 12:04
Kontaktdaten:

vielen dank für die tipps soweit läuft nun alles.

ich versuche gerade eine funktion zu schreiben die ungefähr so aussieht:

Code: Alles auswählen

def isChecked():
    if checkbox1.checked() == True
        foo
    else:
        foo2


nur leider kennt der compiler das statement chkbox1.checked nicht, ich find auch nichts, kann auch sein das ich einfach zu dumm bin!



gruß

phil
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

phill hat geschrieben:nur leider kennt der compiler das statement chkbox1.checked nicht, ich find auch nichts, kann auch sein das ich einfach zu dumm bin!
Betreibst du Programmierung nach dem Motto "Lustiges Schnittstellen-Raten"? Die wxPython-Dokumentation ist da schon sehr eindeutig ;-) Sonst gibt es auch noch die "dir"-Funktion und Docstrings.

Das "==True" kannst du gleich veglassen. Was kommt bei dem Vergleich wohl raus?
Das Leben ist wie ein Tennisball.
Antworten