Listbox auswahl als Int
-
- User
- Beiträge: 21
- Registriert: Sonntag 6. Januar 2019, 12:32
aber Listbox hat keinen attribut namens "type"
-
- User
- Beiträge: 21
- Registriert: Sonntag 6. Januar 2019, 12:32
kannst du mal ein beispiel geben, denn bei mir gibts keinen Listbox attribut namens "type()"
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Code_Bender: `type()` ist eine eingebaute Funktion die den Typ des Arguments ermittelt. Und den kannst Du dann ausgeben.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 21
- Registriert: Sonntag 6. Januar 2019, 12:32
wenn ich selection = type(listbox.get("active")) und dann print(selection) mache dann kommt "<class 'str'>" raus
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Code_Bender: Deckt sich mit der Dokumentation zu der Methode.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 21
- Registriert: Sonntag 6. Januar 2019, 12:32
Kannst du bitte ein Beispiel an einer Listbox geben?
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Code_Bender: Die verlinkte Referenzdokumentation beschreibt genau was `curselection()` zurück gibt, sowohl den/die Datentyp(en) als auch die Bedeutung der Werte. Es sind Grunddatentypen. Wenn Du das nicht gebacken kriegst, dann arbeite ein Grundlagentutorial durch, bis Du Dich mit den Python-Grundlagen auskennst.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Hi Code_Bender
Hier etwas zum herumspielen:Gruss wuf
Hier etwas zum herumspielen:
Code: Alles auswählen
import random
import tkinter as tk
APP_TITLE = "Listbox Selection"
APP_XPOS = 100
APP_YPOS = 100
APP_WIDTH = 300
APP_HEIGHT = 300
class Application(object):
def __init__(self, main_win):
self.main_win = main_win
self.build()
def build(self):
self.radom_data = [round(random.uniform(0,1000), 2)
for cycle in range(20)]
print(self.radom_data)
self.main_frame = tk.Frame(self.main_win)
self.main_frame.pack(fill='both', expand=True, padx=10, pady=10)
scrollbar = tk.Scrollbar(self.main_frame)
scrollbar.grid(row=0, column=1, sticky='ns')
listbox = tk.Listbox(self.main_frame, height=10, width=50,
selectmode="extended")
listbox.grid(row=0, column=0)
listbox.selection_set(0)
listbox["yscrollcommand"] = scrollbar.set
listbox.bind('<<ListboxSelect>>', self.check)
self.listbox = listbox
scrollbar["command"] = listbox.yview
listbox.insert('end', *self.radom_data)
def check(self, event):
print(type(self.listbox.curselection()), self.listbox.curselection())
line_nubers = self.listbox.curselection()
for line_nr in line_nubers:
selected_element = self.listbox.get(line_nr)
print("Selektiertes Listbox-Elemente-{}: {}".format(
line_nr, selected_element))
def main():
main_win = tk.Tk()
main_win.title(APP_TITLE)
main_win.geometry("+{}+{}".format(APP_XPOS, APP_YPOS))
#main_win.geometry("{}x{}".format(APP_WIDTH, APP_HEIGHT))
app = Application(main_win)
main_win.mainloop()
if __name__ == '__main__':
main()
#from tkinter import *
#from tkinter.scrolledtext import ScrolledText
#from tkinter.ttk import Progressbar
#from tkinter.ttk import Combobox
#from tkinter import messagebox
#from tkinter import filedialog
#from time import *
#import webbrowser as web
#import os
#import sys
#FONT = ["Bahnschrift", 14 , "bold"]
#FONT2 = ["Bahnschrift", 12 , "bold"]
#def n1(event=None):
#def OPEN(event=None):
#filename = filedialog.askdirectory()
#Wider_zu.insert("end", filename)
#def BACK(event=None):
#var = -600
#var2 = 0
#for i in range(100):
#var = var + 6
#var2 = var2 + 6
#main.place(x=var, y=0)
#Wider.place(x=var2, y=0)
#sleep(0)
#root.update()
#Wider.destroy()
#def WIDERHER(event=None):
#e = Wider_zu.get()
#prolb["text"] = "Suche Dateien"
#Wider_zu.config(state="disabled")
#Widerher.config(state="disabled")
#for i in range(20):
#pro["value"] = i
#sleep(0.000025)
#root.update()
#if e == "":
#Wider_zu.config(state="normal")
#Widerher.config(state="normal")
#prolb["text"] = "Ein fehler ist Aufgetreten"
#prolb["text"] = "Dateien lokatisiert"
#try:
#d1r = open(scroll.get("active"), "r")
#d1 = d1r.read()
#d2 = open(Wider_zu.get()+"/"+scroll.get("active"), "w")
#d2.write(d1)
#prolb["text"] = "Dateien Ungeschrieben"
#for i in range(560):
#i = i + 20
#pro["value"] = i
#sleep(0)
#root.update()
#root.update()
#sleep(0.5)
#prolb["text"] = "Warten..."
#for i in range(20):
#i = i + 580
#pro["value"] = i
#sleep(0.25)
#root.update()
#pro.update()
#d1.close()
#d2.close()
#except:
#Wider_zu.config(state="normal")
#Widerher.config(state="normal")
#prolb["text"] = "Ein fehler ist Aufgetreten"
#Wider = Frame(root, height=300, width=600, bg="#FFFFFF")
#Wider.place(x=600, y=0)
#sc = Scrollbar(Wider)
#sc.place(x=300, y=80)
#scroll = Listbox(Wider, height=10, width=50, selectmode="extended")
#scroll.place(x=0, y=80)
#scroll.selection_set(0)
#scroll["yscrollcommand"] = sc.set
#sc["command"] = scroll.yview
#filer = open("C:/Users/Gabriel/Documents/1 Projeckte/Abteil B/Datei Liste.data", "r")
#file = filer.read().splitlines()
#filer.close()
#for i in file:
#scroll.insert("end", i)
#DatOpen = Button(Wider, text="Order Öffnen", bg="#FFFFFF", relief="raised", bd=1,
#font=FONT, command = OPEN)
#DatOpen.place(x=477, y=0)
#Back = Button(Wider, text="< Zurück", bg="#FFFFFF", relief="raised", bd=1,
#font=FONT, command = BACK)
#Back.place(x=0, y=0)
#Wider_zulb = Label(Wider, text="Widerherstellen zu:", bg="#FFFFFF", font=FONT2)
#Wider_zulb.place(x=0, y=50)
#Wider_zu = Entry(Wider, width=40, bg="#FFFFFF", font=FONT2)
#Wider_zu.place(x=150, y=52)
#Widerher = Button(Wider, text="Widerherstellen", bg="#FFFFFF", font=FONT2,
#relief="raised", bd=1, width=13, command = WIDERHER)
#Widerher.place(x=474, y=245)
#pro = Progressbar(Wider, length=600, maximum=600, value=0)
#pro.place(x=0, y=278)
#prolb = Label(Wider, text="", bg="#FFFFFF", font=FONT2)
#prolb.place(x=230, y=250)
#var = 0
#var2 = 600
#for i in range(100):
#var = var - 6
#var2 = var2 - 6
#Wider.place(x=var2, y=0)
#main.place(x=var, y=0)
#sleep(0)
#root.update()
#def n2(event=None):
#def BACK(event=None):
#var = -600
#var2 = 0
#for i in range(100):
#var = var + 6
#var2 = var2 + 6
#main.place(x=var, y=0)
#Hinzu.place(x=var2, y=0)
#sleep(0)
#root.update()
#Hinzu.destroy()
#def M(event=None):
#sel = listbox
#del file[sel]
#print(file)
##listbox.delete(0, END)
##for i in file:
##listbox.insert("end", i)
#Hinzu = Frame(root, height=300, width=600, bg="#FFFFFF")
#Hinzu.place(x=600, y=0)
#Back = Button(Hinzu, text="< Zurück", bg="#FFFFFF", relief="raised", bd=1,
#font=FONT, command = BACK)
#Back.place(x=0, y=0)
#listbox = Listbox(Hinzu, height=10, width=40)
#listbox.place(x=0, y=40)
#filer = open("C:/Users/Gabriel/Documents/1 Projeckte/Abteil B/Datei Liste.data", "r+")
#file = filer.read().splitlines()
#filer.close()
#for i in file:
#listbox.insert("end", i)
#plus = Button(Hinzu, text="+", width=2, bg="#FFFFFF", relief="raised", bd=1)
#plus.place(x=0, y=210)
#minus = Button(Hinzu, text="-", width=2, bg="#FFFFFF", relief="raised", bd=1, command =M)
#minus.place(x=23, y=210)
#var = 0
#var2 = 600
#for i in range(100):
#var = var - 6
#var2 = var2 - 6
#Hinzu.place(x=var2, y=0)
#main.place(x=var, y=0)
#sleep(0)
#root.update()
#root = Tk()
#root.title("Datei Manager v.1.1")
#root.resizable(0, 0)
#root.geometry("600x300+330+100")
#root.config(bg="#FFFFFF")
##root.iconbitmap(r"Datei Icon.ico")
#root.attributes("-topmost", False)
#try:
#import winsound as sound
#except:
#messagebox.showerror \
#("!Error!", "Das Modul 'Winsound'\nKonnte nicht gefunden werden!")
#main = Frame(root, height=300, width=600, bg="#FFFFFF")
#main.place(x=0, y=0)
#D_Widerherstellen = Button(main, text="Dateien Widerherstellen >", width=20, bg="#FFFFFF",
#relief="raised", bd=1, font="Bahnschrift 14 bold", command = n1, justify="left")
#D_Widerherstellen.place(x=0, y=80)
#D_Hinzufuegen = Button(main, text="Dateien Verwalten >", width=20, bg="#FFFFFF",
#relief="raised", bd=1, font="Bahnschrift 14 bold", command = n2, justify="left")
#D_Hinzufuegen.place(x=0, y=120)
#root.mainloop()
Take it easy Mates!
-
- User
- Beiträge: 21
- Registriert: Sonntag 6. Januar 2019, 12:32
Danke schön für die vielen Vorschläge, ich nehme mir die Zeit es durchzuarbeiten.
Ich bin das erste mal auf dem Python Forum, bin 13 Jahre alt und mache Python
erst seit 1 Jahr.
Danke und bis Bald!
Ich bin das erste mal auf dem Python Forum, bin 13 Jahre alt und mache Python
erst seit 1 Jahr.
Danke und bis Bald!
Code: Alles auswählen
from tkinter import *
Win = Tk()
file = ("a","b","c")
listbox = Listbox(Win, height=5)
listbox.pack()
for i in file:
listbox.insert("end", i)
def DEL():
sel = listbox.curselection()[0]
print(sel, file[sel])
minus = Button(Win, text="Hallo", command = DEL)
minus.pack()
Win.mainloop()
mfg
Gregor
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@gregix: Anmerkungen zum Quelltext: Sternchen-Importe sind Böse™. Damit holt man sich gerade bei `tkinter` deutlich mehr als 150 Namen ins Modul von denen nur ein ganz kleiner Bruchteil tatsächlich verwendet wird. Es wird schwerer nachzuvollziehen was woher kommt, und es besteht die Gefahr von Namenskollisionen.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Noch unübersichtlicher wird es wenn zwischen dem Hauptprogramm auf Modulebene auch noch Funktionsdefinitionen stehen. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen: Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).
Man sollte keine kryptischen Abkürzungen verwenden, sondern Dinge so benennen, das der Leser nicht raten muss was der Name bedeuten mag.
`file` ist kein Name für ein Tupel mit Zeichenketten. Bei einem Objekt das `file` heisst, erwartet der Leser das es sich um ein Dateiobjekt handelt, das `read()`- und/oder `write()`-Methoden besitzt. Das Tupel ist auch nicht die richtige Wahl. Tupel verwendet man für Werte wo der Index an dem jeder Wert steht, etwas über die Bedeutung des Wertes aussagt. Wenn alle Werte die gleiche Bedeutung haben, dann verwendet man eine Liste. Ausnahme wäre wenn man zwingend die Eigenschaft benötigt, dass die Sequenz ”hashbar” ist, um sie beispielsweise als Schlüssel in einem Wörterbuch oder als Element in einer Menge verwenden zu können.
Nach Kommas erhöht ein Leerzeichen die Lesbarkeit.
`i` ist kein guter Name für etwas anderes als eine ganze Zahl, insbesondere wenn es dann auch noch die Laufvariable in einer Schleife ist.
Um Gleicheitszeichen bei Schlüsselwortargumenten werden keine Leerzeichen gesetzt.
`minus` ist ein sehr komischer Name für eine Schaltfläche die in diesem Programm überhaupt gar keinen Namen braucht.
`DEL` wäre von der Schreibweise der Name für eine Konstante und nicht für eine Funktion. Die drei Buchstaben beschreiben auch nicht wirklich die Tätigkeit, die diese Funktion verrichtet.
Funktionen und Methoden sollten alles was sie ausser Konstanten benötigten als Argument(e) übergeben bekommen. In diesem Programm kommt man noch mit `functools.partial()` aus, aber bei jeder nicht-trivialen GUI wird man nicht wirklich um objektorientierte Programmierung herum kommen.
Der Code berücksichtigt nicht den Fall das *kein* Eintrag ausgewählt ist wenn auf der Benutzer auf die Schaltfläche klickt.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Noch unübersichtlicher wird es wenn zwischen dem Hauptprogramm auf Modulebene auch noch Funktionsdefinitionen stehen. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen: Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).
Man sollte keine kryptischen Abkürzungen verwenden, sondern Dinge so benennen, das der Leser nicht raten muss was der Name bedeuten mag.
`file` ist kein Name für ein Tupel mit Zeichenketten. Bei einem Objekt das `file` heisst, erwartet der Leser das es sich um ein Dateiobjekt handelt, das `read()`- und/oder `write()`-Methoden besitzt. Das Tupel ist auch nicht die richtige Wahl. Tupel verwendet man für Werte wo der Index an dem jeder Wert steht, etwas über die Bedeutung des Wertes aussagt. Wenn alle Werte die gleiche Bedeutung haben, dann verwendet man eine Liste. Ausnahme wäre wenn man zwingend die Eigenschaft benötigt, dass die Sequenz ”hashbar” ist, um sie beispielsweise als Schlüssel in einem Wörterbuch oder als Element in einer Menge verwenden zu können.
Nach Kommas erhöht ein Leerzeichen die Lesbarkeit.
`i` ist kein guter Name für etwas anderes als eine ganze Zahl, insbesondere wenn es dann auch noch die Laufvariable in einer Schleife ist.
Um Gleicheitszeichen bei Schlüsselwortargumenten werden keine Leerzeichen gesetzt.
`minus` ist ein sehr komischer Name für eine Schaltfläche die in diesem Programm überhaupt gar keinen Namen braucht.
`DEL` wäre von der Schreibweise der Name für eine Konstante und nicht für eine Funktion. Die drei Buchstaben beschreiben auch nicht wirklich die Tätigkeit, die diese Funktion verrichtet.
Funktionen und Methoden sollten alles was sie ausser Konstanten benötigten als Argument(e) übergeben bekommen. In diesem Programm kommt man noch mit `functools.partial()` aus, aber bei jeder nicht-trivialen GUI wird man nicht wirklich um objektorientierte Programmierung herum kommen.
Der Code berücksichtigt nicht den Fall das *kein* Eintrag ausgewählt ist wenn auf der Benutzer auf die Schaltfläche klickt.
Code: Alles auswählen
#!/usr/bin/env python3
from functools import partial
import tkinter as tk
def print_selected_filename(listbox, filenames):
indices = listbox.curselection()
if indices:
assert len(indices) == 1, 'more than one selected'
index = indices[0]
print(index, filenames[index])
def main():
filenames = ['a', 'b', 'c']
window = tk.Tk()
listbox = tk.Listbox(window, height=5)
listbox.pack()
for filename in filenames:
listbox.insert(tk.END, filename)
tk.Button(
window,
text='Hallo',
command=partial(print_selected_filename, listbox, filenames),
).pack()
window.mainloop()
if __name__ == '__main__':
main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 21
- Registriert: Sonntag 6. Januar 2019, 12:32
Danke!Mein Problem ist gelöst!!
Danke __blackjack__, dass du mir geholfen hast und ein
Danke schön an gregix, dass ihr mein Problem gelöst habt!
Code_Bender
Danke __blackjack__, dass du mir geholfen hast und ein
Danke schön an gregix, dass ihr mein Problem gelöst habt!
Code_Bender