PyQt5 Menu Barda Yeni Pencere Acmak

Merhaba Arkadaslar,

python ile 6-7 aylik bir tanisikligim oldu suan yapmak istedigim bir uygulama var. Aldigim verileri sql tutup sonrada guncelleme, silme, arama, ekleme islemleri yapiyorum fakat pyqt5 munu bar tiklayip yeni pencere acip islemleri orada yapmak konusunda takilip kaldim. Ayrica navigasyon menusude eklemek istiyorum ornekler ulasip inceledim aynisi yapmaya calistim fakat bir turlu haritayi cikartamadim. Hata kodu vermeden bir cikti verip islem sonlaniyor. Fikriniz almak isterim.

hata vermeden kapanmas─▒n─▒n nedeni sys.exit(sys._exec()) kodunu kullanmam─▒┼č olman olabilir sys mod├╝l├╝n├╝ import edip dener misin?
bu arada foruma ho┼čgeldiniz

Hata verilip verilmedi─čini g├Ârmek i├žin projeyi konsoldan ├žal─▒┼čt─▒rmay─▒ deneyin.

Tesekkurler

Moduller konusunda herhangi bir s─▒k─▒nt─▒ olmas─▒ gereken b├╝t├╝n moduller ekli

kodu cal─▒st─▒rd─▒g─▒mda ald─▒g─▒m cikti " Figure(layout=FigureLayout(height=ÔÇś420pxÔÇÖ)) "

Onuda denedim ayn─▒ c─▒kt─▒y─▒ al─▒yorum

tamam da hi├ž denediniz mi s├Âyledi─čimi

O zaman kodunuzu da bizimle payla┼č─▒n:

Simdi denedim fakat hata mesaji aldim :slight_smile:

sys.exit(sys._exec())
AttributeError: module ÔÇśsysÔÇÖ has no attribute ÔÇś_execÔÇÖ

ha onun sebebi benim sana verdi─čim fonksiyonun yanl─▒┼č olmas─▒ ama galiba hemen kapanmamas─▒n─▒ sa─člayacak kod ona benzer bir ┼čeydi

Suan farkli bir sey deniyorum onun uzerine biraz calisim paylasirim.

sys.exit(sys.exec_())
AttributeError: module ÔÇśsysÔÇÖ has no attribute ÔÇśexec_ÔÇÖ
Hata ayni normalde calisma seklini paylasim

app = QApplication(sys.argv)
sys.exit(app.exec_())

ha cevab─▒ biliyor musun normalde

Evet onu biliyorum benim kurgulayamadigim sanirsam ilki pyqt5 ve sqlite ile ilgili bir durum var. ikinci durum icin yeni pencere acimayi engelleyen farkli bir durum daha var onu fark edemedim
harita icinde suanlik herhangi bir tezim yok. Kod uzerinde biraz calisim paylasirim.

tamam o zaman siz biraz daha u─čra┼č─▒n kodlarla sonra payla┼č─▒rs─▒n─▒z ├ž├Âzemezseniz

Muhtemelen benimde zaman─▒nda kar┼č─▒la┼čt─▒─č─▒m bir hata ile kar┼č─▒la┼č─▒yorsun. Hi├žbir hata kodu vermeden pencerenin a├ž─▒lmas─▒n─▒ bekledi─čin halde a├ž─▒lm─▒yorsa y├╝ksek ihtimal pencereyi yeni bir de─či┼čkene kaydetmemi┼čsindir. Pencerenin ram ├╝zerinde bir adreste tutulmas─▒ gerekiyor. Ba┼čka bir class olu┼čturup QWidget veya QMainWindow s─▒n─▒flar─▒ndan miras alarak kendi widgetiniz yaz─▒n. Daha sonra o pencereye ge├ži┼č yapmak istedi─činizde
diyelim ki olu┼čturdu─čunuz s─▒n─▒f─▒n ad─▒ yeniwindow olsun

pencere = yeniwindow()
pencere.show()

yapmal─▒s─▒n─▒z.
yeniwindow().show() gibi bir┼čey yap─▒yorsan─▒z bu ram ├╝zerinde bir de─čer tutmayaca─č─▒ i├žin kapanacakt─▒r en az─▒ndan ben sebebinin bu oldu─čunu bulmu┼čtum ama ├ž├Âz├╝m ├žal─▒┼č─▒yor e─čer sorun b├Âyleyse

self.seninactionun.triggered.connect(self.show)
def show(self):
    window = yeniwindow()
    window.show()
#e─čer as─▒l pencere kapanacaksa pencereyi globala kaydedebilirsin
    globals()["pencere"] = window
    self.destroy()


class yeniwindow(QWidget):
    def __init__(self,*args,**kwargs):
        super().__init__()
        soket = kwargs["soket"]
        self.ui = File_SystemW()
        self.ui.setupUi(self)

yeniwindow zaten olu┼čturuldu─ču anda bellekte yer kapl─▒yor. Ekran─▒n kapanmas─▒n─▒n sebebi, ekran─▒ temsil eden nesneye hi├žbir de─či┼čken veya ba┼čka bir nesne i┼čaret etmiyorsa PythonÔÇÖun garbage collectorÔÇÖu taraf─▒ndan otomatik olarak silinmesi.

1 Be─čeni

Buda bellekten siliyor diye biliyordum asl─▒nda o y├╝zden bellekte yer tutmuyor demek istemi┼čtim eksik s├Âylemi┼čim san─▒r─▒m

1 Be─čeni

Peki garbage collector u kapatsak bu y├Ântem i┼če yararm─▒ acaba ?

Denemek laz─▒m, PythonÔÇÖdaki garbage collectorÔÇÖun as─▒l g├Ârevi reference cycleÔÇÖlar─▒n─▒ k─▒rmak. Onun haricinde reference countÔÇÖu s─▒f─▒r olan nesneler an─▒nda siliniyor.

Tabii bu ekran─▒n silinmesini engellese bile bir ├ž├Âz├╝m de─čil, memory leakÔÇÖa sebep olur.