Saso je napisal/-a:Uf, tole mi je pa vzelo kar cel dan.
Sem moral celo knjižnico prevohat.
Ob zagonu preverim, koliko in katere naprave so priključene na USB in prek LAN.
Potem pa izberem na katero naj se SW priklopi, da ne vpisujem kje v skripti ročno IP-ja ali pa serijske številke če je priključen PoKeys xxU.
Počasi a vstrajno gre naprej.
mucek je napisal/-a:In??? Koliko mph?
Gre za mojo prototipno ploščo za prvo verzijo komunikacijskega krmilnika, ki sem ga načrtoval v srednjih osemdesetih letih, pred malo manj kot 40 leti.
Ima vgrajen procesor 68k, štiri Zilogove 8530 z dvojnim serijskim portom, FIFO za medprocesno komunikacijo, in naslovne dekodirnike v PALih od Memolithic Memories.
Osem plastno vezje za naslednjo verzijo z 68020 smo načrtovali s paketom, ki je takrat stal okrog 100,000 DEM. Kljub taki pregrešni ceni je podpiral samo 4 bakrene plasti. Končali smo tako
da smo naredili dve plošči in smo signale, ki povezujejo obe, zlepili skupaj "ročno" na ustreznih koordinatah.
Danes bi to bilo neprimerno preprosteje, brez licenčnih stroškov, narediti s KiCadom.
Upam da bomo deležni še kode , pa kakšna ponovitev arduino šole bi prav prišla.VolkD je napisal/-a:Malo se igram z arduino:
Saj mogoče bo kdo rekel, pa kaj,...poskusi narediti kaj podobnega!
import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
from openpyxl import load_workbook
def isci_komponente():
iskalni_niz = entry_ime.get().strip().upper()
opis = entry_opis.get().strip().upper()
kategorija = entry_kategorija.get().strip().upper()
ohisje = entry_ohisje.get().strip().upper()
if not any([iskalni_niz, opis, kategorija, ohisje]):
messagebox.showwarning("Opozorilo", "Vnesite vsaj eno polje za iskanje.")
return
global wb, sheet, indeksi_kategorij, najdene_komponente
wb = load_workbook("C:\\Users\\Lovro\\Desktop\\komponente EXE\\komponente.xlsx")
sheet = wb.active
naslovi = [cell.value.strip().upper() for cell in next(sheet.iter_rows(min_row=1, max_row=1))]
indeksi_kategorij = {naslov: indeks for indeks, naslov in enumerate(naslovi)}
najdene_komponente = {}
for row in sheet.iter_rows(min_row=2, values_only=True):
if (
(iskalni_niz in str(row[indeksi_kategorij.get("OZNAKA", 0)]).strip().upper() or not iskalni_niz) and
(opis in str(row[indeksi_kategorij.get("OPIS", 1)]).strip().upper() or not opis) and
(kategorija in str(row[indeksi_kategorij.get("KATEGORIJA", 2)]).strip().upper() or not kategorija) and
(ohisje in str(row[indeksi_kategorij.get("OHIŠJE", 3)]).strip().upper() or not ohisje)
):
oznaka_komponente = row[indeksi_kategorij.get("OZNAKA", 0)]
if oznaka_komponente not in najdene_komponente:
najdene_komponente[oznaka_komponente] = []
najdene_komponente[oznaka_komponente].append(row)
if najdene_komponente:
prikazi_rezultate(najdene_komponente, indeksi_kategorij)
else:
messagebox.showinfo("Rezultat iskanja", "Nobena komponenta ni bila najdena.")
def prikazi_rezultate(najdene_komponente, indeksi_kategorij):
for item in tree.get_children():
tree.delete(item)
for oznaka, komponente in najdene_komponente.items():
for komponenta in komponente:
tree.insert("", tk.END, values=(
oznaka,
komponenta[indeksi_kategorij.get('OPIS', 1)],
komponenta[indeksi_kategorij.get('OHIŠJE', 3)],
komponenta[indeksi_kategorij.get('KOLIČINA', 4)],
komponenta[indeksi_kategorij.get('POLICA', 5)],
komponenta[indeksi_kategorij.get('PREDAL', 6)],
komponenta[indeksi_kategorij.get('SEKTOR', 7)]
))
def shrani_kolicino():
selected_item = tree.selection()
if not selected_item:
messagebox.showwarning("Opozorilo", "Izberite komponento za urejanje.")
return
nova_kolicina = entry_kolicina.get().strip()
if not nova_kolicina.isdigit():
messagebox.showwarning("Opozorilo", "Vnesite veljavno količino.")
return
selected_text = tree.item(selected_item, 'values')
oznaka = selected_text[0]
for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row, min_col=1, max_col=sheet.max_column):
if row[indeksi_kategorij.get("OZNAKA", 0)].value == oznaka:
row[indeksi_kategorij.get('KOLIČINA', 4)].value = int(nova_kolicina)
break
wb.save("C:\\Users\\Lovro\\Desktop\\komponente EXE\\komponente.xlsx")
messagebox.showinfo("Uspeh", "Količina je bila uspešno posodobljena.")
tree.item(selected_item, values=(
oznaka,
selected_text[1],
selected_text[2],
nova_kolicina,
selected_text[4],
selected_text[5],
selected_text[6]
))
def dodaj_komponento():
oznaka = entry_dodaj_ime.get().strip().upper()
opis = entry_dodaj_opis.get().strip().upper()
kategorija = entry_dodaj_kategorija.get().strip().upper()
ohisje = entry_dodaj_ohisje.get().strip().upper()
kolicina = entry_dodaj_kolicina.get().strip()
polica = entry_dodaj_polica.get().strip().upper()
predal = entry_dodaj_predal.get().strip().upper()
sektor = entry_dodaj_sektor.get().strip().upper()
if not oznaka:
messagebox.showwarning("Opozorilo", "Vnesite oznako komponente.")
return
if not kolicina.isdigit():
messagebox.showwarning("Opozorilo", "Vnesite veljavno količino.")
return
for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row, min_col=1, max_col=sheet.max_column):
if row[indeksi_kategorij.get("OZNAKA", 0)].value == oznaka:
messagebox.showwarning("Opozorilo", "Komponenta z enako oznako že obstaja.")
return
sheet.append([oznaka, opis, kategorija, ohisje, int(kolicina), polica, predal, sektor])
wb.save("C:\\Users\\Lovro\\Desktop\\komponente EXE\\komponente.xlsx")
messagebox.showinfo("Uspeh", "Komponenta je bila uspešno dodana.")
entry_dodaj_ime.delete(0, tk.END)
entry_dodaj_opis.delete(0, tk.END)
entry_dodaj_kategorija.delete(0, tk.END)
entry_dodaj_ohisje.delete(0, tk.END)
entry_dodaj_kolicina.delete(0, tk.END)
entry_dodaj_polica.delete(0, tk.END)
entry_dodaj_predal.delete(0, tk.END)
entry_dodaj_sektor.delete(0, tk.END)
def odstrani_komponento():
selected_item = tree.selection()
if not selected_item:
messagebox.showwarning("Opozorilo", "Izberite komponento za odstranitev.")
return
selected_text = tree.item(selected_item, 'values')
oznaka = selected_text[0]
for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row, min_col=1, max_col=sheet.max_column):
if row[indeksi_kategorij.get("OZNAKA", 0)].value == oznaka:
sheet.delete_rows(row[0].row)
break
wb.save("C:\\Users\\Lovro\\Desktop\\komponente EXE\\komponente.xlsx")
messagebox.showinfo("Uspeh", "Komponenta je bila uspešno odstranjena.")
tree.delete(selected_item)
root = tk.Tk()
root.title("Iskanje komponent")
label_ime = tk.Label(root, text="Oznaka:")
label_ime.grid(row=0, column=0)
entry_ime = tk.Entry(root)
entry_ime.grid(row=0, column=1)
label_opis = tk.Label(root, text="Opis:")
label_opis.grid(row=1, column=0)
entry_opis = tk.Entry(root)
entry_opis.grid(row=1, column=1)
label_kategorija = tk.Label(root, text="Kategorija:")
label_kategorija.grid(row=2, column=0)
entry_kategorija = tk.Entry(root)
entry_kategorija.grid(row=2, column=1)
label_ohisje = tk.Label(root, text="Ohišje:")
label_ohisje.grid(row=3, column=0)
entry_ohisje = tk.Entry(root)
entry_ohisje.grid(row=3, column=1)
button_isci = tk.Button(root, text="Išči", command=isci_komponente)
button_isci.grid(row=4, columnspan=2)
tree = ttk.Treeview(root, columns=('Oznaka', 'Opis', 'Ohišje', 'Količina', 'Polica', 'Predal', 'Sektor'), show='headings')
tree.grid(row=5, column=0, columnspan=2)
tree.heading('Oznaka', text='Oznaka')
tree.heading('Opis', text='Opis')
tree.heading('Ohišje', text='Ohišje')
tree.heading('Količina', text='Količina')
tree.heading('Polica', text='Polica')
tree.heading('Predal', text='Predal')
tree.heading('Sektor', text='Sektor')
scrollbar = ttk.Scrollbar(root, orient='vertical', command=tree.yview)
scrollbar.grid(row=5, column=2, sticky='ns')
tree.configure(yscrollcommand=scrollbar.set)
entry_kolicina = tk.Entry(root)
entry_kolicina.grid(row=6, column=1)
button_shrani = tk.Button(root, text="Shrani količino", command=shrani_kolicino)
button_shrani.grid(row=6, column=0)
separator = ttk.Separator(root, orient='horizontal')
separator.grid(row=7, columnspan=2, sticky='ew', pady=10)
label_dodaj_ime = tk.Label(root, text="Dodaj komponento - Oznaka:")
label_dodaj_ime.grid(row=8, column=0)
entry_dodaj_ime = tk.Entry(root)
entry_dodaj_ime.grid(row=8, column=1)
label_dodaj_opis = tk.Label(root, text="Opis:")
label_dodaj_opis.grid(row=9, column=0)
entry_dodaj_opis = tk.Entry(root)
entry_dodaj_opis.grid(row=9, column=1)
label_dodaj_kategorija = tk.Label(root, text="Kategorija:")
label_dodaj_kategorija.grid(row=10, column=0)
entry_dodaj_kategorija = tk.Entry(root)
entry_dodaj_kategorija.grid(row=10, column=1)
label_dodaj_ohisje = tk.Label(root, text="Ohišje:")
label_dodaj_ohisje.grid(row=11, column=0)
entry_dodaj_ohisje = tk.Entry(root)
entry_dodaj_ohisje.grid(row=11, column=1)
label_dodaj_kolicina = tk.Label(root, text="Količina:")
label_dodaj_kolicina.grid(row=12, column=0)
entry_dodaj_kolicina = tk.Entry(root)
entry_dodaj_kolicina.grid(row=12, column=1)
label_dodaj_polica = tk.Label(root, text="Polica:")
label_dodaj_polica.grid(row=13, column=0)
entry_dodaj_polica = tk.Entry(root)
entry_dodaj_polica.grid(row=13, column=1)
label_dodaj_predal = tk.Label(root, text="Predal:")
label_dodaj_predal.grid(row=14, column=0)
entry_dodaj_predal = tk.Entry(root)
entry_dodaj_predal.grid(row=14, column=1)
label_dodaj_sektor = tk.Label(root, text="Sektor:")
label_dodaj_sektor.grid(row=15, column=0)
entry_dodaj_sektor = tk.Entry(root)
entry_dodaj_sektor.grid(row=15, column=1)
button_dodaj = tk.Button(root, text="Dodaj komponento", command=dodaj_komponento)
button_dodaj.grid(row=16, columnspan=2)
button_odstrani = tk.Button(root, text="Odstrani komponento", command=odstrani_komponento)
button_odstrani.grid(row=17, columnspan=2)
root.mainloop()
Lovro7 je napisal/-a:Nova verzija uporablja excell samo kot bazo podatkov. Vse ostalo je sedaj v enem oknu.
Noro, kaj vse lahko naredi umetna inteligenca.
Če koga zanima je koda tukaj:
- Koda: Izberi vse
import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
from openpyxl import load_workbook
def isci_komponente():
iskalni_niz = entry_ime.get().strip().upper()
opis = entry_opis.get().strip().upper()
kategorija = entry_kategorija.get().strip().upper()
ohisje = entry_ohisje.get().strip().upper()
if not any([iskalni_niz, opis, kategorija, ohisje]):
messagebox.showwarning("Opozorilo", "Vnesite vsaj eno polje za iskanje.")
return
global wb, sheet, indeksi_kategorij, najdene_komponente
wb = load_workbook("C:\\Users\\Lovro\\Desktop\\komponente EXE\\komponente.xlsx")
sheet = wb.active
naslovi = [cell.value.strip().upper() for cell in next(sheet.iter_rows(min_row=1, max_row=1))]
indeksi_kategorij = {naslov: indeks for indeks, naslov in enumerate(naslovi)}
najdene_komponente = {}
for row in sheet.iter_rows(min_row=2, values_only=True):
if (
(iskalni_niz in str(row[indeksi_kategorij.get("OZNAKA", 0)]).strip().upper() or not iskalni_niz) and
(opis in str(row[indeksi_kategorij.get("OPIS", 1)]).strip().upper() or not opis) and
(kategorija in str(row[indeksi_kategorij.get("KATEGORIJA", 2)]).strip().upper() or not kategorija) and
(ohisje in str(row[indeksi_kategorij.get("OHIŠJE", 3)]).strip().upper() or not ohisje)
):
oznaka_komponente = row[indeksi_kategorij.get("OZNAKA", 0)]
if oznaka_komponente not in najdene_komponente:
najdene_komponente[oznaka_komponente] = []
najdene_komponente[oznaka_komponente].append(row)
if najdene_komponente:
prikazi_rezultate(najdene_komponente, indeksi_kategorij)
else:
messagebox.showinfo("Rezultat iskanja", "Nobena komponenta ni bila najdena.")
def prikazi_rezultate(najdene_komponente, indeksi_kategorij):
for item in tree.get_children():
tree.delete(item)
for oznaka, komponente in najdene_komponente.items():
for komponenta in komponente:
tree.insert("", tk.END, values=(
oznaka,
komponenta[indeksi_kategorij.get('OPIS', 1)],
komponenta[indeksi_kategorij.get('OHIŠJE', 3)],
komponenta[indeksi_kategorij.get('KOLIČINA', 4)],
komponenta[indeksi_kategorij.get('POLICA', 5)],
komponenta[indeksi_kategorij.get('PREDAL', 6)],
komponenta[indeksi_kategorij.get('SEKTOR', 7)]
))
def shrani_kolicino():
selected_item = tree.selection()
if not selected_item:
messagebox.showwarning("Opozorilo", "Izberite komponento za urejanje.")
return
nova_kolicina = entry_kolicina.get().strip()
if not nova_kolicina.isdigit():
messagebox.showwarning("Opozorilo", "Vnesite veljavno količino.")
return
selected_text = tree.item(selected_item, 'values')
oznaka = selected_text[0]
for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row, min_col=1, max_col=sheet.max_column):
if row[indeksi_kategorij.get("OZNAKA", 0)].value == oznaka:
row[indeksi_kategorij.get('KOLIČINA', 4)].value = int(nova_kolicina)
break
wb.save("C:\\Users\\Lovro\\Desktop\\komponente EXE\\komponente.xlsx")
messagebox.showinfo("Uspeh", "Količina je bila uspešno posodobljena.")
tree.item(selected_item, values=(
oznaka,
selected_text[1],
selected_text[2],
nova_kolicina,
selected_text[4],
selected_text[5],
selected_text[6]
))
def dodaj_komponento():
oznaka = entry_dodaj_ime.get().strip().upper()
opis = entry_dodaj_opis.get().strip().upper()
kategorija = entry_dodaj_kategorija.get().strip().upper()
ohisje = entry_dodaj_ohisje.get().strip().upper()
kolicina = entry_dodaj_kolicina.get().strip()
polica = entry_dodaj_polica.get().strip().upper()
predal = entry_dodaj_predal.get().strip().upper()
sektor = entry_dodaj_sektor.get().strip().upper()
if not oznaka:
messagebox.showwarning("Opozorilo", "Vnesite oznako komponente.")
return
if not kolicina.isdigit():
messagebox.showwarning("Opozorilo", "Vnesite veljavno količino.")
return
for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row, min_col=1, max_col=sheet.max_column):
if row[indeksi_kategorij.get("OZNAKA", 0)].value == oznaka:
messagebox.showwarning("Opozorilo", "Komponenta z enako oznako že obstaja.")
return
sheet.append([oznaka, opis, kategorija, ohisje, int(kolicina), polica, predal, sektor])
wb.save("C:\\Users\\Lovro\\Desktop\\komponente EXE\\komponente.xlsx")
messagebox.showinfo("Uspeh", "Komponenta je bila uspešno dodana.")
entry_dodaj_ime.delete(0, tk.END)
entry_dodaj_opis.delete(0, tk.END)
entry_dodaj_kategorija.delete(0, tk.END)
entry_dodaj_ohisje.delete(0, tk.END)
entry_dodaj_kolicina.delete(0, tk.END)
entry_dodaj_polica.delete(0, tk.END)
entry_dodaj_predal.delete(0, tk.END)
entry_dodaj_sektor.delete(0, tk.END)
def odstrani_komponento():
selected_item = tree.selection()
if not selected_item:
messagebox.showwarning("Opozorilo", "Izberite komponento za odstranitev.")
return
selected_text = tree.item(selected_item, 'values')
oznaka = selected_text[0]
for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row, min_col=1, max_col=sheet.max_column):
if row[indeksi_kategorij.get("OZNAKA", 0)].value == oznaka:
sheet.delete_rows(row[0].row)
break
wb.save("C:\\Users\\Lovro\\Desktop\\komponente EXE\\komponente.xlsx")
messagebox.showinfo("Uspeh", "Komponenta je bila uspešno odstranjena.")
tree.delete(selected_item)
root = tk.Tk()
root.title("Iskanje komponent")
label_ime = tk.Label(root, text="Oznaka:")
label_ime.grid(row=0, column=0)
entry_ime = tk.Entry(root)
entry_ime.grid(row=0, column=1)
label_opis = tk.Label(root, text="Opis:")
label_opis.grid(row=1, column=0)
entry_opis = tk.Entry(root)
entry_opis.grid(row=1, column=1)
label_kategorija = tk.Label(root, text="Kategorija:")
label_kategorija.grid(row=2, column=0)
entry_kategorija = tk.Entry(root)
entry_kategorija.grid(row=2, column=1)
label_ohisje = tk.Label(root, text="Ohišje:")
label_ohisje.grid(row=3, column=0)
entry_ohisje = tk.Entry(root)
entry_ohisje.grid(row=3, column=1)
button_isci = tk.Button(root, text="Išči", command=isci_komponente)
button_isci.grid(row=4, columnspan=2)
tree = ttk.Treeview(root, columns=('Oznaka', 'Opis', 'Ohišje', 'Količina', 'Polica', 'Predal', 'Sektor'), show='headings')
tree.grid(row=5, column=0, columnspan=2)
tree.heading('Oznaka', text='Oznaka')
tree.heading('Opis', text='Opis')
tree.heading('Ohišje', text='Ohišje')
tree.heading('Količina', text='Količina')
tree.heading('Polica', text='Polica')
tree.heading('Predal', text='Predal')
tree.heading('Sektor', text='Sektor')
scrollbar = ttk.Scrollbar(root, orient='vertical', command=tree.yview)
scrollbar.grid(row=5, column=2, sticky='ns')
tree.configure(yscrollcommand=scrollbar.set)
entry_kolicina = tk.Entry(root)
entry_kolicina.grid(row=6, column=1)
button_shrani = tk.Button(root, text="Shrani količino", command=shrani_kolicino)
button_shrani.grid(row=6, column=0)
separator = ttk.Separator(root, orient='horizontal')
separator.grid(row=7, columnspan=2, sticky='ew', pady=10)
label_dodaj_ime = tk.Label(root, text="Dodaj komponento - Oznaka:")
label_dodaj_ime.grid(row=8, column=0)
entry_dodaj_ime = tk.Entry(root)
entry_dodaj_ime.grid(row=8, column=1)
label_dodaj_opis = tk.Label(root, text="Opis:")
label_dodaj_opis.grid(row=9, column=0)
entry_dodaj_opis = tk.Entry(root)
entry_dodaj_opis.grid(row=9, column=1)
label_dodaj_kategorija = tk.Label(root, text="Kategorija:")
label_dodaj_kategorija.grid(row=10, column=0)
entry_dodaj_kategorija = tk.Entry(root)
entry_dodaj_kategorija.grid(row=10, column=1)
label_dodaj_ohisje = tk.Label(root, text="Ohišje:")
label_dodaj_ohisje.grid(row=11, column=0)
entry_dodaj_ohisje = tk.Entry(root)
entry_dodaj_ohisje.grid(row=11, column=1)
label_dodaj_kolicina = tk.Label(root, text="Količina:")
label_dodaj_kolicina.grid(row=12, column=0)
entry_dodaj_kolicina = tk.Entry(root)
entry_dodaj_kolicina.grid(row=12, column=1)
label_dodaj_polica = tk.Label(root, text="Polica:")
label_dodaj_polica.grid(row=13, column=0)
entry_dodaj_polica = tk.Entry(root)
entry_dodaj_polica.grid(row=13, column=1)
label_dodaj_predal = tk.Label(root, text="Predal:")
label_dodaj_predal.grid(row=14, column=0)
entry_dodaj_predal = tk.Entry(root)
entry_dodaj_predal.grid(row=14, column=1)
label_dodaj_sektor = tk.Label(root, text="Sektor:")
label_dodaj_sektor.grid(row=15, column=0)
entry_dodaj_sektor = tk.Entry(root)
entry_dodaj_sektor.grid(row=15, column=1)
button_dodaj = tk.Button(root, text="Dodaj komponento", command=dodaj_komponento)
button_dodaj.grid(row=16, columnspan=2)
button_odstrani = tk.Button(root, text="Odstrani komponento", command=odstrani_komponento)
button_odstrani.grid(row=17, columnspan=2)
root.mainloop()
forest70 je napisal/-a:No moja stran za material je napisana v php + javascript in za bazo sql. Link
Saso je napisal/-a:To je pa tko, če ti Chat piše kodo.
Tole je iz enega od mojih python programov za insert v db:
def insert(self, selected_date, prihod, odhod):
db = sqlite3.connect("dure.db")
cursor = db.cursor()
query = "INSERT INTO delovneure(datum, preihod, odhod) VALUES (?,?,?)"
row = (selected_date, prihod, odhod,)
cursor.execute(query, row)
db.commit()
Za select, delete in update pa tudi ni nič drugače.
VolkD je napisal/-a:Rišem škatlo za projekt Mašun 2024.
Drži!robi je napisal/-a:Kaj bo to? Zvočnik?
Seveda, pa baterije tudi.robi je napisal/-a:BT?
Ni skrivnost, a je zaenkrat v fazi preizkušanja. Ni garancije, da bo ostalo tako kot je zamišljeno.robi je napisal/-a:Napiši malo več, če ni skrivnost?
Kake driverje boste dali not, stereo/mono?...bas reflex?
tilz0R je napisal/-a:Lovro7, predlagam:
- UI naredi v QtCreator-ju, uporabi pyside6 (Qt za python)
- Inštaliraj pyside6 preko pip python
- uporabi sqlite za data source, ne Excel
Po forumu brska: 0 registriranih uporabnikov in 3 gostov