Merhaba. Foruma yeni kaydoldum. Aranızda olmaktan mutlu olduğumu söylemeliyim.
2-3 haftadır aktif olarak python çalışıyorum. tkinter modülünü kullanarak basit bir arayüz geliştirdim. Bütün kodlarım aynı dosyanın içinde . Şimdilik 600 satırı geçti. Fakat amatör bir iş yaptığmın farkındayım. Arkada mysql sorgusu ve pandas işlemleri yapılırken arayüz “yanıt vermiyor” yazarak kitleniyor işlem bitene kadar. Geçenlerde dildeolupbiten in “Tkinter uygulamalarında class
kullanmanızı tavsiye ederim.” cümlesini okudum bir başlığın altında.
Biraz biraz öğrendiğim bilgiyle aşağıdaki kodu yazdım.
AttributeError: type object ‘Display’ has no attribute ‘ekranlar’ hatası verdi.
Sorunum hakkında yardımcı olursanız sevinirim.
Amacım öncelikle ana py dosyasında sadece arayüzün kodu olması.
Olabilirse her sekmenin py dosyası ayrı olacak. Bütün kodların aynı dosyada olması programı hantallaştırır diye düşünüyorum. Farklı sınıflar farklı dosyalar arasında değişken aktarımı nasıl olacak? Aynı dosyada farklı fonksiyonlarda global değişken tanımlamayla sorun çözülüyor. Fakat farklı sınırlar için yapamadım.
init le başlayan fonksiyon sanırım sınıfın ön tanımlı fonksiyonu gibi bir şey. Arayüzü de böyle tanımladım. Bu konuda daha yararlı yöntemler olacağına inanıyorum.
Şimdilik kodlama kısmına ağırlık verdiğim için sonrasını düşünmedim. Fakat günün sonunda kodları exe haline getirip bir kaç bilgisayarda daha kullanılmasını sağlamam gerekiyor. python kurulu olmayan bilgisayarlarda çalışmadığıyla ilgili bir şeyler okudum. Bu konuda öneriniz nedir?
Biraz uzun oldu sanırım. İlk mesajım olduğu için kusura bakmayın.
import tkinter as tk
from tkinter import ttk, filedialog,messagebox
import os
icmalsablonyolu=""
def icmalsablon():
global icmalsablonyolu, icmalsablonyoluetiket
icmalsablonyolu = filedialog.askopenfilename(multiple=False, title="İcmal Şablonunu Seç",
filetypes=(("Excel Workbook", "*.xls"), ("Excel Workbook", "*.xlsx")))
icmalsablonyoluetiket.config(text=icmalsablonyolu)
class icmal:
def __init__(self):
if icmalsablonyolu:
verigir()
else:
messagebox.showinfo("İcmal Şablon Dosyası Bulunamadı",
"İcmal Şablonunu Belirlemek İçin Ayarlara Yönlendiriliyorsunuz")
Display.ekranlar.select(Display.ayarlarekran)
class Display:
def __init__(self):
global icmalsablonyolu, icmalsablonyoluetiket
self.root=tk.Tk()
self.en = 800
self.boy = 400
self.root.geometry('%dx%d+%d+%d' % (
self.en, self.boy, ((self.root.winfo_screenwidth() / 2) - (self.en / 2)), ((self.root.winfo_screenheight() / 2) - (self.boy / 2))))
self.root.resizable(False, False)
self.root.columnconfigure(0, weight=1)
self.root.rowconfigure(0, weight=1)
# SEKMELER
self.ekranlar = ttk.Notebook(self.root)
self.aekran = tk.Frame(self.ekranlar, bg="#A9CCE3")
self.bekran = tk.Frame(self.ekranlar, bg="#FDEDEC")
self.ayarlarekran = tk.Frame(self.ekranlar, bg="#EAF2F8")
self.surecbilgiekran = tk.Frame(self.ekranlar)
self.ekranlar.add(self.aekran, text='aekran')
self.ekranlar.add(self.bekran, text='bekran')
self.ekranlar.add(self.ayarlarekran, text='AYARLAR')
self.ekranlar.add(self.surecbilgiekran, text='SUREC BILGI')
self.ekranlar.grid(row=0, column=0, sticky="news")
# SÜREÇ BİLGİ EKRANI
self.surecbilgilist_sbarX = tk.Scrollbar(self.surecbilgiekran, orient='horizontal')
self.surecbilgilist_sbarX.pack(side='bottom', fill='x')
self.surecbilgilist_sbarY = tk.Scrollbar(self.surecbilgiekran)
self.surecbilgilist_sbarY.pack(side='right', fill='y')
self.surecbilgilist = tk.Listbox(self.surecbilgiekran, xscrollcommand=self.surecbilgilist_sbarX.set,
yscrollcommand=self.surecbilgilist_sbarY.set)
self.surecbilgilist.pack(side='right', expand=True, fill='both')
self.surecbilgilist_sbarX.config(command=self.surecbilgilist.xview)
self.surecbilgilist_sbarY.config(command=self.surecbilgilist.yview)
self.mdm_button1 = tk.Button(self.aekran, text="MDM", width=10, height=2, font="Helvetica 12 bold")
self.mdm_button1.grid(row=0, column=0, padx=10, pady=10)
self.icmal_button = tk.Button(self.aekran, text="icmal", width=10, height=2, command=icmal, font="Helvetica 12 bold")
self.icmal_button.grid(row=0, column=1, padx=10)
self.guncelseyt_button = tk.Button(self.aekran, text="Güncel SEYT", width=10, height=2,
font="Helvetica 12 bold")
self.guncelseyt_button.grid(row=1, column=0, pady=10)
# AYARLAR SEKMESİ
self.icmalsecbutton = tk.Button(self.ayarlarekran, text='İcmal Şablon Seç', command=icmalsablon, font="Helvetica 10")
self.icmalsecbutton.grid(row=0, column=0)
icmalsablonyoluetiket = tk.Label(self.ayarlarekran, text=icmalsablonyolu)
icmalsablonyoluetiket.grid(row=0, column=1)
self.cikis = tk.Button(self.ayarlarekran, text="Çıkış", command=self.root.destroy, width=10, height=2, font="Helvetica 12 bold")
self.cikis.grid(row=3, column=0, pady=10)
self.root.mainloop()
display=Display()