Merhaba, çoklu dosyalarla çalışıyorum 2 adet py dosyası oluşturdum birbirlerine import ettim ama aşşagıdaki hatayı veriyor nedenini anlayamadım yardım ederseniz sevinirim.

Merhaba, çoklu dosyalarla çalışıyorum 2 adet py dosyası oluşturdum birbirlerine import ettim ama aşşagıdaki hatayı veriyor nedenini anlayamadım yardım ederseniz sevinirim.

Döngüsel bir import yapmaya çalıştığınız için hata alıyorsunuz.
test2.py'yi çalıştırdınız. İlk satırındaki koda göre test3 import edilmeye çalışıldı ve test2'nin devamında satırlara geçilemedi çünkü test3 import edildiği anda bu kez test3'deki ilk satırdan ötürü test2 import edilmeye çalışıldı. test2 import edilmeye çalışılınca bu sefer yine test2nin ilk satırı çalıştırıldı ve o satırda yine test3 import edildi.
Sonuç olarak böyle bir import etme yöntemi sonsuz bir döngü oluşturur ve bir türlü dosyalardaki diğer kodlara geçilmez. Böyle bir import etme yöntemi ister istemez hatalara yol açar.
nasıl yapmalıyım karşılıklı köprüleme yapmak istiyorum
Köprüleme nedir? Ne yapmak istiyorsunuz?
İki dosyanin da birbirini import etmesi gereken bir durum programlamada olamaz. Ne yapmak istediginizi yazin.
yapmak istedigim iki dosyanında birbirinden veri alabilmesi örnegin test2.py de bulunan deneme = 1’i test.py de kullanmak aynı zamanda test.py de bulunan deneme2 = 2 degişkenini test2.py de kullanabilmek
Peki bunun amaci ne? Programlamada neden buna ihtiyac duyuyorsun?
Demek istedigim nasil bir program yapmaya calisirken buna ihtiyac duydun?
Aşşagıdaki örnekte neden ihtiyaç duydugumu görebilirsiniz
Test2.py dosyasındaki kodlar:
from tkinter import*
import test3
if __name__ == '__main__':
global app
LeftPanel_BG = "#1a1c20"
font =('arial',13,'bold')
Color1 = "#131417"
Color2 = "#c4c4c5"
app = Tk()
app.geometry("300x300+500+200")
app.configure(bg=LeftPanel_BG)
left_panel = Frame(app,bg=LeftPanel_BG,width=180,height=715)
left_panel.pack(side=TOP, anchor=NW,fill=Y)
left_panel.pack_propagate(0)
btn = test3.sButton(left_panel,bg="#1a1c20",fg="#c4c4c5",border="0",text="Ana Sayfa",compound=LEFT,justify=LEFT,
command= lambda:app.show_frame("Anasayfa"),padx=15,width=550,height=50)
btn.place(x=82,y=200, anchor=CENTER)
Test3.py isimli dosyadaki kodlar
from tkinter import*
import test2
class sButton(Button):
def __init__(self, master, **kw):
Button.__init__(self,master=master,**kw)
self.defaultBackground = self['bg']
self["activeforeground"] = self['fg']
self["activebackground"] = self.defaultBackground
self['font'] = ('arial',13,'bold')
print(test2.LeftPanel_BG)
self.bind("<Enter>", self.on_enter)
self.bind("<Leave>", self.on_leave)
def on_enter(self, e):
self['background'] = "#131417"
def on_leave(self, e):
self['background'] = self.defaultBackground
HATA
Neden bunu print ediyorsun? Baska bir yerde test2 modulunu kullanmamissin.
çünkü left_panel degişkeni test2.py dosyasının içerisinde başka türlü background colorunu nasıl alabilirm ki
test2 dosyasinde tabii ki. left panel’in tanimlandigi yerde.
Bak, test3 dosyasinda test2'yi import etmissin ama sadece print etmek icin kullanmissin.
nasıl yapabilirim varmı bir çözüm fikrin
Sorunu bilmiyorsun, ve cozum ariyorsun.
?
dediginden birşey anlamadım dostum test2.py dosyasındaki bir veriyi test3.py dosyasında print etmek istiyorum biliyorsan bi çözüm önerebilirsin
sbutton sınıfından örnek oluştururken değişkeni parametre olarak yazabilirsiniz. test2.py dosyasını çalıştırın.
Ayrıca bu aşağıdaki ifade hata üretir.
command= lambda:app.show_frame("Anasayfa"),padx=15,width=550,height=50)
test2.py
import tkinter as tk
from test3 import sButton
LeftPanel_BG = "#1a1c20"
font = ('arial',13,'bold')
Color1 = "#131417"
Color2 = "#c4c4c5"
app = tk.Tk()
app.geometry("300x300+500+200")
app.configure(bg=LeftPanel_BG)
left_panel = tk.Frame(app,bg=LeftPanel_BG,width=180,height=715)
left_panel.pack(side="top", anchor="nw", fill="y")
left_panel.pack_propagate(0)
btn = sButton(
master=left_panel,
bg="#1a1c20",
fg="#c4c4c5",
border="0",
text="Ana Sayfa",
compound="left",
justify="left",
leftpanel_bg=LeftPanel_BG
)
btn.place(x=82,y=200, anchor="center")
app.mainloop()
test3.py
import tkinter as tk
class sButton(tk.Button):
def __init__(self, master, leftpanel_bg, **kw):
tk.Button.__init__(self, master=master, **kw)
self.defaultBackground = self['bg']
self["activeforeground"] = self['fg']
self["activebackground"] = self.defaultBackground
self['font'] = ('arial',13,'bold')
self.bind("<Enter>", self.on_enter)
self.bind("<Leave>", self.on_leave)
print(leftpanel_bg)
def on_enter(self, e):
self['background'] = "#131417"
def on_leave(self, e):
self['background'] = self.defaultBackground
Cevabınız için teşekkür ederim test3.py içerisinde if master == “left_panel” yaptıgımda bu işlem neden geçerli olmuyor
örnegin print başarılı bölümü çalışmıyor
import tkinter as tk
class sButton(tk.Button):
def __init__(self, master, leftpanel_bg, **kw):
tk.Button.__init__(self, master=master, **kw)
self.defaultBackground = self['bg']
self["activeforeground"] = self['fg']
self["activebackground"] = self.defaultBackground
self['font'] = ('arial', 13, 'bold')
self.bind("<Enter>", self.on_enter)
self.bind("<Leave>", self.on_leave)
if master == "left_panel":
print("başarılı")
def on_enter(self, e):
self['background'] = "#131417"
def on_leave(self, e):
self['background'] = self.defaultBackground
if master == "left_panel" ifadesiyle siz master'in left_panel karakter dizisine eşit olup olmadığını sorguluyorsunuz. master parametresine verilecek olan değişkenin (identifier’ın) ismi left_panel sadece. Yani siz şöyle bir şey yapmaya çalışıyorsunuz.
import tkinter as tk
degisken = tk.Frame()
degisken.pack()
def f(parametre):
if parametre == "degisken":
print("başarılı")
f(parametre=degisken)
Dolayısıyla bu da size bir çıktı vermiyor.
master parametresiyle neden bir sorgu yapmak istediğinizi belirtirseniz belki daha rahat yardımcı olabiliriz.
Örnegin
btn = sButton(
master=left_panel,
bg="#1a1c20",
fg="#c4c4c5",
border="0",
text="Ana Sayfa",
compound="left",
justify="left",
leftpanel_bg=LeftPanel_BG
↑ bu bölüm ile hiç ugraşmayıp direkt master bölümünden tespit edip classın oldugu bölümde ayarlamaları yapmak istiyorum if master == “x” şeklinde
import tkinter as tk
class sButton(tk.Button):
def __init__(self, master, leftpanel_bg, **kw):
tk.Button.__init__(self, master=master, **kw)
if master.__contains__('left_panel'):
self.defaultBackground = "red"
self["activeforeground"] = "green"
self["activebackground"] = self.defaultBackground
self['font'] = ('arial', 13, 'bold')
if master.__contains__('right_panel'):
self.defaultBackground = "blue"
self["activeforeground"] = "black"
self["activebackground"] = self.defaultBackground
self['font'] = ('arial', 13, 'bold')
self.bind("<Enter>", self.on_enter)
self.bind("<Leave>", self.on_leave)
def on_enter(self, e):
self['background'] = "#131417"
def on_leave(self, e):
self['background'] = self.defaultBackground
Bu kullanımı nereden gördünüz bilmiyorum ama şöyle kullanmanız daha doğru olur:
if 'left_panel' in master:
aşşagıdaki hatayı veriyor str(master) şeklinde yaptıgımda ise hata vermiyor ama print bölümü çalışmıyor
Traceback (most recent call last):
File "C:/Users/user/Desktop/Python/asd.py", line 16, in <module>
btn = sButton(
File "C:\Users\user\Desktop\Python\dvs.py", line 11, in __init__
if 'left_panel' in master:
File "C:\Users\user\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 1643, in cget
return self.tk.call(self._w, 'cget', '-' + key)
TypeError: can only concatenate str (not "int") to str