Seite 1 von 2
Das Arbeiten mit der Liste
Verfasst: Mittwoch 1. April 2015, 17:26
von Sophus
Hallo Leute, ich möchte mit einer Liste arbeiten. Zunächst mein kleiner Quelltext:
Code: Alles auswählen
def create_movie_form(self):
self.movie_form = Movie_Window(self)
self.movie_form.setAttribute(Qt.WA_DeleteOnClose)
self.movie_form.show()
self.create_subwindow_list(self.movie_form)
def show_search_form(self):
self.search_form = Search_Window(self)
self.search_form.setAttribute(Qt.WA_DeleteOnClose)
self.search_form.show()
self.create_subwindow_list(self.search_form)
def create_window_list(self, windows):
Liste = list()
Liste.append(windows)
for Element in Liste :
print "Formen: ", str(Element)
print "Anzahl:", len(Liste)
Formen: <files.modules_ui.ui_pp_movie.Movie_Window object at 0x029DBED0>
Anzahl: 1
Jedesmal, wenn ich ein Fenster öffne (MDI-Anwendung), soll das Unterfenster in die Liste eingetragen werden (create_window_list). Ich öffne nun zwei Unterfenster, einmal
create_movie_form und
create_search_form. Und damit ich es kontrollieren kann, ob Unterfenster zu der Liste hinzugefügt wurden, und wie viele sich gerade in der Liste befinden, soll er sie mir per Print-Anweisung die Informationen ausgeben. Das "komische" daran ist, dass er jedesmal sagt, es sei nur ein Fenster in der Liste, und zeigt das Fenster auch an. Was mache ich falsch? Rein theoretisch müssten aber die Anzahl bei 2 liegen und beide Objekte müssten in die Liste hinzugefügt und anschließend aufgelistet werden.
Denn bei meiner Mini-Probe funktioniert es wunderbar:
Code: Alles auswählen
def add_more_f1():
f1 = "form1"
add_to_list(f1)
def add_more_f2():
f2 = "form2"
add_to_list(f2)
def add_more_f3():
f3 = "form3"
add_to_list(f3)
def add_to_list(names):
langs = list()
langs.append(names)
for element in langs:
print "Formen: ", str(element)
add_more_f1()
add_more_f2()
add_more_f3()
Formen: form1
Formen: form2
Formen: form3
Re: Das Arbeiten mit der Liste
Verfasst: Mittwoch 1. April 2015, 17:35
von /me
Dein Beispiel tut nicht das, was du denkst. In der Liste steckt immer nur ein Element das aufgerufen wird. Überlege doch mal wo du langs definierst. Da kann nie mehr als ein Wert in der Liste sein. Du erstellst durch den dreimaligen Aufruf der Funktion dreimal eine neue Liste, fügst jeweils ein Element hinzu und gibst das dann aus. Nach dem Verlassen der Funktion existiert die Liste nicht mehr.
Re: Das Arbeiten mit der Liste
Verfasst: Mittwoch 1. April 2015, 17:37
von BlackJack
@Sophus: Deine ”Miniprobe” funktioniert doch auch nicht, auch dort ist immer nur ein Element in der Liste. Was ja auch kein Wunder ist wenn man eine neue Liste erstellt und dort ein Element rein steckt, dann ist da eben auch nur ein Element drin. Das wäre auch sehr komisch wenn das anders wäre.
Mal davon abgesehen würde ich die Liste im ersten Beispiel in Frage stellen. Wozu soll die gut sein?
Re: Das Arbeiten mit der Liste
Verfasst: Mittwoch 1. April 2015, 17:41
von Sophus
BlackJack hat geschrieben:@Sophus: Deine ”Miniprobe” funktioniert doch auch nicht, auch dort ist immer nur ein Element in der Liste. Was ja auch kein Wunder ist wenn man eine neue Liste erstellt und dort ein Element rein steckt, dann ist da eben auch nur ein Element drin. Das wäre auch sehr komisch wenn das anders wäre.
Mal davon abgesehen würde ich die Liste im ersten Beispiel in Frage stellen. Wozu soll die gut sein?
Jetzt kapiere ich es. Verdammt. Danke euch.
Inwiefern stellst du die Liste in Frage? Hat sie ihre Grenzen bzw. Nachteile?
Re: Das Arbeiten mit der Liste
Verfasst: Mittwoch 1. April 2015, 19:21
von BlackJack
@Sophus: Ich verstehe den Sinn der Liste nicht. Warum willst Du die Fenster in einer Liste sammeln? Was passiert mit den Objekten in der Liste wenn der Benutzer ein Fenster schliesst?
Re: Das Arbeiten mit der Liste
Verfasst: Mittwoch 1. April 2015, 19:48
von Sophus
@BlackJack: Ich habe einen Weg gefunden, wie ich das Verhalten der Unterfenster in der MDIArea beeinflussen kann. Üblicherweise ist es so, dass, wenn man ein Unterfenster maximiert öffnet, dass andere Unterfenster, die im Anschluss geöffnet werden, sich an das vorherige Unterfenster anpasst, und sich somit selbst maximiert, obwohl ich im Code explizit gesagt habe, dass das Fenster normal geöffnet werden soll und zwar mit
showNormal. Andersrum, wenn man die Unterfenster-Größen fixiert, so werden Unterfenster, die maximiert angezeigt werden, dann nicht mehr maximiert angezeigt. Egal wie ich es drehe und wende, nichts bringt mich weiter. Ich weiß auch, dass dies im Grunde ein normales Verhalten eines MDI-Bereiches ist. Ich kenne dieses Verhalten auch in VB6. Jedoch möchte ich das nicht. Es sollen bestimmte Unterfenster in der MDI maximiert angezeigt werden, und gleichzeitig andere Fenster normal angezeigt werden. Wer das nun gut oder schlecht findet, spielt keine Rolle

Also wimmel ich jegliche Diskussion ab.
Also habe ich mir einen Weg überlegt, wie ich das Unterfenster so aussehen lassen kann, als sei es maximiert geöffnet und die anderen Unterfenster sollen ihre normal Größe beibehalten. Das heißt, die maximierten Unterfenster werden in diesem Sinne "manipuliert". Und wenn ich dann das MDI-Hauptfenster dann an der Größe ändere (Stichwort resizeEvent), dann sollen die "maximierten" Unterfenster sich mit "bewegen", das heißt, sie sollen sich beim resizeEvent des MDI-Hauptfenster immer dem Hauptfenster anpassen. Dazu "sammel" ich alle Unterfenster in einer Liste. Und alle in der Liste befindlichen Unterfenster werden dann mit bewegt. Damit ich etwas Ressourcen sparen kann, sollen auch nur jene Unterfenster mit bewegt werden, die in die Liste hinzugefügt wurden. Beim Schließen eines Unterfensters wird dieses wieder aus der Liste gelöscht.
Re: Das Arbeiten mit der Liste
Verfasst: Mittwoch 1. April 2015, 20:20
von BlackJack
@Sophus: Ich vermute ja fast wieder trollen, aber mach das mal so. Ist ja nicht so als wenn es genau dafür was gäbe…

Re: Das Arbeiten mit der Liste
Verfasst: Mittwoch 1. April 2015, 20:22
von Sophus
@BlackJack: Deine Vermutungen sind haltlos

Keine Ahnung wie du auf solche Vermutungen kommst. Aber was genau gäbe es denn dafür? Also für meine Vorstellung? Ich lass mich gern aufklären.
Re: Das Arbeiten mit der Liste
Verfasst: Mittwoch 1. April 2015, 20:25
von BlackJack
@Sophus: Das steht in der Dokumentation für QMdiArea. Einfach mal aufmerksam durchlesen. Oder nach passenden Stichworten durchsuchen (und aufmerksam lesen).
Edit: Bei dem Quelltext aus dem ersten Beitrag fehlt für meinen Geschmack das verhindert wird das ein weiteres Fenster geöffnet wird wenn das schon mal offen ist. Oder es macht keinen Sinn das Fenster an das Objekt zu binden. Eines von beidem sollte man machen/lassen.
Re: Das Arbeiten mit der Liste
Verfasst: Mittwoch 1. April 2015, 20:34
von Sophus
@BlackJack: Leider konnte ich für mein Problem nichts finden. Habe mich auch auf StackOverFlow ausgetobt - erfolglos. Kannst du mir bitte ein paar Stichworte bzw. Methoden nennen, damit ich in der Dokumentation nachlesen kann?
Re: Das Arbeiten mit der Liste
Verfasst: Donnerstag 2. April 2015, 07:06
von jerch
@Sophus:
Was Du haben möchtest, klingt eher wie die Funktionalität eines QMainwindow mit centralWidget und seinen stackbaren Seitenwidgets. Falls Du tatsächlich in der Lage sein möchtest, mehrere centralWidgets offen zu haben, kann man dieses mittels TabWidgets oder StackedWidget + Tabbar abbilden. Deine Verrenkungen mit QWorkspace bzw. der Mdiarea haben irgendwie ein "Gschmäckle".
Re: Das Arbeiten mit der Liste
Verfasst: Donnerstag 2. April 2015, 16:19
von Sophus
@jerch: Mein Anliegen scheint sehr selten zu sein. Übrigens, arbeite ich jetzt doch mit MDIArea, auch wenn ich darüber nicht erfreut bin

Egal. Ich habe Google schon mehrere Tage missbraucht und nichts gefunden, was meine Vorstellung treffen könnte. Und dann traf ich auf die QTabbar, jedoch will ich das auch nicht. Was soll ich mit sowas? Es soll nicht aussehen wie ein Browser, das für jedes Fenster eine Tab erstellt wird. Ich denke, ich bleibe vorerst auf meine "Verrenkung", denn so werden die Fenster dargestellt, wie ich sie haben will

Aber trotzdem danke.
Re: Das Arbeiten mit der Liste
Verfasst: Donnerstag 2. April 2015, 17:50
von jerch
Diese Bsp. und speziell
dieses kennst Du, oder?
Re: Das Arbeiten mit der Liste
Verfasst: Donnerstag 2. April 2015, 17:57
von Sophus
@jerch: Ja, aber so will ich es eben nicht haben. Ist mir zu "komisch"
Ich habe mal meine Anwendung abgeknipst (Screenshot - für diejenigen, die Englisch vermissen

)
http://www.bilder-upload.eu/show.php?fi ... 994108.jpg
So will ich sie handhaben, dass der maximierte Unterfenster im Hintergrund weiterhin maximiert bleibt, während das andere Unterfenster im Vordergrund ihre Größe beibehalten kann.
Re: Das Arbeiten mit der Liste
Verfasst: Donnerstag 2. April 2015, 18:17
von jerch
@Sophus:
Also das Bild macht mir ja ein bisschen Angst vor den MVC-Fragen, die da noch kommen werden
Ich versteh nicht, was Du mit dem Bild in Bezug auf "...dass der maximierte Unterfenster im Hintergrund weiterhin maximiert bleibt, während das andere Unterfenster im Vordergrund ihre Größe beibehalten kann." meinst. Ich sehe im Bild nur ein Widget, welches im centralWidget kein Layout hat und einen Dialog davor. Dialoge sind per se modal, es sei denn man möchte Interaktion mit anderen Elementen erlauben. Das hat aber nichts mit MDI zu tun, da ein Dialog ein eigenständiges Fenster ist. Welcher Teil soll MDI werden?
Re: Das Arbeiten mit der Liste
Verfasst: Donnerstag 2. April 2015, 18:22
von Sophus
@jerch: Was zum Kuckuck ist ein MVC? Und nein, es ist kein Dialog, sondern ein QWidget, welches dort innerhalb des MDI-Bereich angezeigt wird - beide Unterfenster sind also im MDIArea-Widget. Würde ich mein hinteres Unterfenster nicht modifizieren, dann würde sich das kleine Unterfenster sich ebenfalls maximieren - ganz automatisch. Wenn du es nicht nachvollziehen kannst, dann bastel doch mal fix ein MDI-Fenster, zwei Unterfenster, wo hingehend einer maximiert angezeigt wird, und öffne dann mal das zweite Fenster normal und schau was passiert

Das zweite Fenster wird sich auch maximieren. Und genau das will ich eben nicht

Und die anderen Beispiele sind nicht das, was ich mir vorstelle. Dies entspricht eben nicht meinem "Geschmack". Und darüber brauchen wir uns nicht streiten

Re: Das Arbeiten mit der Liste
Verfasst: Donnerstag 2. April 2015, 19:38
von BlackJack
@Sophus: Wie schön das das was Du möchtest von `QMdiArea` schon unterstützt wird. Man muss es ihm nur sagen.

Re: Das Arbeiten mit der Liste
Verfasst: Donnerstag 2. April 2015, 19:42
von Sophus
@BlackJack: Eigentlich warte ich immer noch auf deine Stichworte, wonach ich suchen soll. Bitte sag mir jetzt nicht SubWindowView und/oder TabbedView als Stichworte

Re: Das Arbeiten mit der Liste
Verfasst: Donnerstag 2. April 2015, 19:48
von BlackJack
@Sophus: Da kommst Du schon selbst drauf. Ich habe Vertrauen in Deine Fähigkeiten.

Re: Das Arbeiten mit der Liste
Verfasst: Donnerstag 2. April 2015, 19:49
von Sophus
@BlackJack: In 1354684764321558 Jahren werde ich ganz bestimmt drauf kommen
