Seite 1 von 2
Zwei kurze Fragen
Verfasst: Sonntag 19. Juni 2011, 13:21
von questlove
1 Wie kann ich en tkinter fenster (root = TK()) so festsetzten dass man es nicht mehr mit dem Mauszeiger verändern kann?
2. Wie kann ich die widgets in einem Fenster wie Button und Entry genau positionieren, also dass die nicht einlach untereinander liegen und dazwischen kein platz ist.
danke

Re: Zwei kurze Fragen
Verfasst: Sonntag 19. Juni 2011, 13:36
von questlove
bei 1.: verkleinern schon, aber nicht mehr vergrößern

Re: Zwei kurze Fragen
Verfasst: Sonntag 19. Juni 2011, 14:26
von wuf
Hallo questlove
Antwort auf Frage-1:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import Tkinter as tk
#~~ Lade den Dateiname dieses Skriptes
script_name = sys.argv[0]
#~~ Konstanten für die Abmessungen des Hauptfensters
MAIN_WIN_XPOS = 10
MAIN_WIN_YPOS = 10
MAIN_WIN_WIDTH = 320
MAIN_WIN_HEIGHT = 320
#--- Erstelle ein Tk-Hauptfenster ----
app_win = tk.Tk()
app_win.geometry("%dx%d+%d+%d" % (MAIN_WIN_WIDTH, MAIN_WIN_HEIGHT,
MAIN_WIN_XPOS, MAIN_WIN_YPOS))
app_win.maxsize(MAIN_WIN_WIDTH, MAIN_WIN_HEIGHT)
app_win['bg'] = 'khaki'
app_win.title(script_name)
app_win.mainloop()
Gruß wuf

Re: Zwei kurze Fragen
Verfasst: Sonntag 19. Juni 2011, 14:29
von questlove
danke

Re: Zwei kurze Fragen
Verfasst: Sonntag 19. Juni 2011, 14:33
von wuf
Hallo questlove
questlove hat geschrieben:2. Wie kann ich die widgets in einem Fenster wie Button und Entry genau positionieren, also dass die nicht einlach untereinander liegen und dazwischen kein platz ist.
Kannst du uns eine von dir gewünschte Anordnung von Widgets (in einem Fenster) präsentieren?
Gruß wuf

Re: Zwei kurze Fragen
Verfasst: Sonntag 19. Juni 2011, 15:35
von questlove
zum Beispiel würde ich Gerne bei meinem Programm
(
http://www.python-forum.de/pastebin.php?mode=view&s=213)
nach dem ein Neues Projekt im Menü Datei aufgerufen wird, dass beim erscheinenden Fenster die Widgets nicht untereinander liegen sondern zum Beispiel der Button ganz unten und mehr platz dazwischen usw...
Re: Zwei kurze Fragen
Verfasst: Sonntag 19. Juni 2011, 18:25
von wuf
Hallo questlove
Habe mich jetzt nur auf die Funktion 'new_project()' konzentriert. Für die Gestaltung des Widgetlayoutes stehen drei Layoutmanger zur Verfügung. Dies sind der Pack-, Grid- oder Place-Layoutmanger. Den Place-Manger würde ich nur für spezielle Fälle verwenden, wo Widgets auf einer absoluten Position positioniert werden müssen. Die beiden anderen Pack- bzw. Grid-Managern ermöglichen eine automatische von der Fenstergrösse abhängigen Platzierung Ich gebrauche hauptsächlich den Pack-Manager. Verwende deshalb öffters das Frame-Widget um Widgets wie 'Labels', 'Entries' usw. zu gruppieren um sie nachher zusammen mit dem Frame als Gruppe im Gesamtlayout zu platzieren. Wenn du in deiner Anwendung ein weiteres Fenster brauchst solltest du das Toplevel-Widget verwendet. Beim schliessen des Hauptfensters werden dann alle geöffneten Toplevel-Fenster auch geschlossen. Für Toplevelwidgets braucht es keinen weiteren Aufruf der '.mainloop()' Methode.
Hier die modifizierte 'new_project()' Funktion:
Code: Alles auswählen
def new_project():
#Erstellung des "Neues Projekt" Fensters
new_project_dialog = tk.Toplevel()
new_project_dialog.title("Neues Projekt")
width = 200
height = 300
xpos = 850
ypos = 450
new_project_dialog.geometry('%dx%d+%d+%d' % (width, height, xpos, ypos))
#Funktion des "Fertig" Buttons
def Ende():
projektname = titel.get()
new_project_dialog.destroy()
Projektfenster(projektname)
# Widgets des "Neues Projekt" Fensters
project_name_frame = tk.Frame(new_project_dialog)
project_name_frame.pack(side='top', fill='x')
name=tk.Label(project_name_frame, text="Projektname:")
name.pack()
titel=tk.Entry(project_name_frame, bg='white', bd=1, highlightthickness=0)
titel.pack()
button_frame = tk.Frame(new_project_dialog)
button_frame.pack(side='bottom', fill='x')
finish_button = tk.Button(button_frame, text="Fertig", command=Ende)
finish_button.pack(side='left')
Gruß wuf

Re: Zwei kurze Fragen
Verfasst: Sonntag 19. Juni 2011, 19:02
von questlove
sehr nett

vielen dank..
Re: Zwei kurze Fragen
Verfasst: Montag 20. Juni 2011, 08:31
von questlove
noch so eine kurze
ist es möglich bei einem Polygon in canvas
Code: Alles auswählen
self.clef= [(38,184), (40,190), (47,184), ( 37, 150), (44, 140), (45,155),
(32,169), (40,180), (49,175), (46,163), ( 37,168), (40,173)]
self.create_line(self.clef, smooth=True, width=1)
das ich hier mit linien der stärke 1 verbunden habe, zum teil mit solchen und zum teil mir Linien der stärke 2 zu verbinden?
ich würde den dadurch entstehenden
Notenschlüssel gerne etwas original getreuer zeichnen

Re: Zwei kurze Fragen
Verfasst: Montag 20. Juni 2011, 08:45
von Xynon1
Da müsstest du einzelne Linien zeichnen, das würde sehr aufwendig werden. Also nimm doch einfach ein/das Bild vom Notenschlüssel.
Im allgemeinen könnte man das gesamte Notationsprogramm aus Bildern zusammfügen, jede Note ein Bild. Das wäre sicherlich übersichtlicher als, in einer Funktion gefühlte 800 Koordinaten zuhaben und keine davon vertauschen darf.
Re: Zwei kurze Fragen
Verfasst: Montag 20. Juni 2011, 10:00
von questlove
Das ist natürlich auch eine gute Idee. Ich habe jetzt mir mal ein .gif in der richtigen Größe eines Notenschlüssels erstellt sowie die notenköpfe.
Wie kann ich diese Bilder jetzt in das canvas Fenster einbinden und an die richtige stelle über die Zeilen setzten?
Da braucht man doch os oder?
Re: Zwei kurze Fragen
Verfasst: Montag 20. Juni 2011, 10:17
von Xynon1
Sieh dir bitte nochmal den unteren Teil meines
Posts an, dann weißt due wie man Bilder auf den Canvas packen kannst.
Die Positionierung ist auch hier nicht ganz einfach, am besten skalierst du alle Bilder auf eine Einheitsgröße und rechnest dann mit dieser oder du schreibst dir ein paar kleine Funktionen um die Größe und damit die Position der Bildobjekte besser bestimmen zu können.
Re: Zwei kurze Fragen
Verfasst: Montag 20. Juni 2011, 11:09
von questlove
tut mir leid aber ich finde da garnichts..
kann mir irgentjemand erklären wie das geht, auch mit positionierung?
Re: Zwei kurze Fragen
Verfasst: Montag 20. Juni 2011, 11:14
von Xynon1
Na in dem du die ".create_bitmap"- oder ".create_image"-Methode vom Canvas benutzt.
Re: Zwei kurze Fragen
Verfasst: Montag 20. Juni 2011, 11:21
von questlove
ja aber da erstellt man doch eins und ruft nicht ein bestehendes auf, oder??
da kann man nirgens sagen ich will das bild aus dem ordner.
Re: Zwei kurze Fragen
Verfasst: Montag 20. Juni 2011, 11:44
von Xynon1
Ach du hast noch nicht mal die Bilder in den Speicher geladen. Dazu gibt es die Klasse
Tkinter.PhotoImage oder Tkinter.BitmapImage. Wie es mit der PIL funktioniert steht auch dabei.
Re: Zwei kurze Fragen
Verfasst: Freitag 2. September 2011, 13:19
von questlove
nochmal eine kurze frage:
wie kann man dem schließen des Fensters duch das rote X noch methoden hinzufügen?
Re: Zwei kurze Fragen
Verfasst: Freitag 2. September 2011, 15:11
von wuf
Hi questlove
Gruß wuf

Re: Zwei kurze Fragen
Verfasst: Montag 10. Oktober 2011, 14:26
von questlove
wie mache ich es am besten die widgets in einem Fenster zu platzieren? Zur Zeit habe ich es mit "anchor = W" in der pack-methode gemacht, jedoch kann ich dann nur immer untereinander zum Beispiel Radiobuttons, erzeugen. Ich hätte aber gerne untereinander und nebeneinander radiobuttons(Die aber untereinander nichts miteinander zu tun haben. Sozusagen kann man bei den untereinander etwas auswhlen und bei den nebeneinander am Rand vom Fenster. Wie muss ich sie platzieren?
LG
Re: Zwei kurze Fragen
Verfasst: Montag 10. Oktober 2011, 15:48
von BlackJack
@questlove: Du könntest die zusammengehörenden Widgets in einen `Frame` stecken (mit `pack()` oder `grid()`) und die `Frame`\s dann in das Fenster (mit `pack()` oder `grid()`). Mit `pack()` kann man nicht nur untereinander, sondern auch nebeneinander anordnen. Aber innerhalb eines Container-Widgets bitte immer nur in eine Richtung, sonst wird es unverhersehbar was die Layout-Engine daraus macht.