Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Valabilitate permis auto cat. A s...

Caramida aparenta peste termosistem

Linistea din timpul penelor de cu...

Achiziție laptop baterie det...
 Cenzura in masa comentarii youtube

Inscriere copil la scoala in Roma...

exista adaptoare pentru baterii P...

Sa folosim antivirus, antimalware?
 SMS suspect livrare "posta ro...

Film original sau pirat?

Cum poti inregistra CD-uri in for...

Ceainaria celor pasionați de...
 Probleme la acoperis din cauza in...

Transferuri instant intre bancile...

player video cu preview cadru pe ...

Carrefour Act for good
 

Apelare metoda dintr-o metoda statica (Python - Tkinter)

- - - - -
  • Please log in to reply
4 replies to this topic

#1
vdivs92

vdivs92

    Junior Member

  • Grup: Junior Members
  • Posts: 83
  • Înscris: 25.07.2015
Buna seara, am urmatoarea problema; am o clasa dupa cum urmeaza:

import tkinter as tk
from tkinter import ttk
class Application(tk.Tk):
def __init__(self):
	 super().__init__()
	 self.title("Main window")
	 self.geometry('500x500')
	 tk.Button(self, command = self.open_w, text = "Deschide fereastra").pack()
def open_w(self):
	 TopWIndow(self)
def get_data(self):
	 print("a")
@staticmethod
def show_data():
	 obj = Application()
	 obj.get_data


class TopWIndow(tk.Toplevel):
def __init__(self, parent):
	 super().__init__(parent)
	 self.title('Toplevel')
	 self.geometry('300x300')
	 tk.Button(self, command = self.execute, text = "Apeleaza metoda din fereastra principala").pack()
def execute(self):
	 obj = Application
	 obj.show_data()

if __name__ == "__main__":
app = Application()
app.mainloop()


Daca apelez direct metoda, ori o metoda statica, pe langa fereastra principala deja deschisa, imi mai apare una peste.
Aici e detaliat doar in mare. In realitate sta cam asa:

Am clasa cu fereastra principala cu un foarmular de adaugare in baza de date, iar sub formular e un Treeview care se actualizeaza ori de cate ori dadaug ceva. langa Treeview am un buton de <Editare>; cand selectez ceva din Treeview, acele date sunt trimite intr-un Toplevel si afisate in niste inputuri pentru a putea fi editate.
Pana aici e totul in regula. Editez, salvez in baza de date, fereastra Toplevel se inchide.
Dar dupa ce se inchide fereastra as vrea ca in Treeview sa se reincarce datele.
Daca procedez asa
obj = Application()
obj.show_data

Se mai deschide un MainWindow dar cu datele actualizate
Am incercat sa fac o metoda statica in pe care sa o apelez din fereastra Toplevel; o apeleaza dar intrebarea e:
Cum apelez o metoda nume_metoda(self) dintr-o metoda statica?
Daca pun in metoda statica acelasi lucru cum am pus in fereastra Top:
obj = Application()
obj.get_data


Sper ca am fost cat de cat de explicit. Daca mai e nevoie de informatii va stau la dispozitie. Scuze daca sunt erori de redactare; am cel putin 5 ore de cand caut.

#2
Soulstream

Soulstream

    Senior Member

  • Grup: Senior Members
  • Posts: 5,015
  • Înscris: 03.02.2014
nu e clar ce vrei sa faci, dar in
TopWIndow
ai deja o instanta a clasei
Application 
tinuta in variabila
parent
. de ce nu apelezi direct
parent.get_data() 
???

#3
vdivs92

vdivs92

    Junior Member

  • Grup: Junior Members
  • Posts: 83
  • Înscris: 25.07.2015

View PostSoulstream, on 19 septembrie 2023 - 21:58, said:

nu e clar ce vrei sa faci, dar in
TopWIndow
ai deja o instanta a clasei
Application 
tinuta in variabila
parent
. de ce nu apelezi direct
parent.get_data() 
???

Esti nebun?  :))))
Acel parent din clasa a doua nu il vedea, dar in constructor am pus
self.parent = parent

Iar in metoda de actualizare
self.parent.get_data

A mers. Nu m-a dus gandul la treaba asta.

Ca sa intelegi, in clasa/fereastra toplevel aveam un formular de pentru modificare in bd; dupa ce modificam niste date, acele date de schimbau in bd dar nu sti in treeviw.
Nu reuseam cum. Daca apelam:
obj = Application()
obj.get_data

Imi mai aparea o fereastra principala.

Cautam o modalitatea de a apela metoda de preluare date din bd si afisare in Treeview, scrisa in clasa din Application.

Multumesc muuuult, de tot  :D :D :D

#4
Soulstream

Soulstream

    Senior Member

  • Grup: Senior Members
  • Posts: 5,015
  • Înscris: 03.02.2014
era si evident ca iti mai crea inca o fereasta pt ca in metoda statica creai o noua instanta a clasei Application. daca vrei ca fiecare instantiere a unei clasa sa obtii acelasi obiect, trebuie sa faci clasa Singleton, dar un singleton nu e ceva ce trebuie folosit arbitrar, ci trebuie folosit ca e cea mai buna abordare.

#5
vdivs92

vdivs92

    Junior Member

  • Grup: Junior Members
  • Posts: 83
  • Înscris: 25.07.2015

View PostSoulstream, on 19 septembrie 2023 - 22:15, said:

era si evident ca iti mai crea inca o fereasta pt ca in metoda statica creai o noua instanta a clasei Application. daca vrei ca fiecare instantiere a unei clasa sa obtii acelasi obiect, trebuie sa faci clasa Singleton, dar un singleton nu e ceva ce trebuie folosit arbitrar, ci trebuie folosit ca e cea mai buna abordare.
Invat Python si GUI in Tkinter. Nu castig bani de pe asta. Dar m-am loivit de problema si mie nu imi place sa trec mai departe fara sa gasesc o rezolvare.
Era o solutie atat de usoara, dar cine stie e mult mai usor. :D
Multumesc inca odata..

Anunturi

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate