HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!
patron takip sistemi ekledim ama interfacemodule eklemesi olmadığı için F5 Menü gibi sistemlerde arayüzünü açamıyorum sistemin kendimce sistemin interface eklemelerini yaptım F5 Menü sisteminde açıldı fakat patronlara tıklanmıyor syser de atmıyor
patron takip sistemi ekledim ama interfacemodule eklemesi olmadığı için F5 Menü gibi sistemlerde arayüzünü açamıyorum sistemin kendimce sistemin interface eklemelerini yaptım F5 Menü sisteminde açıldı fakat patronlara tıklanmıyor syser de atmıyor
Merhaba, karşılaştığın sorun çok yaygın ve mantığı anlaşıldığında çözümü oldukça basit bir "scope" problemidir. Sorun, interfacemodule içinden yarattığın pencerenin, ana oyun döngüsündeki olayları (tıklamalar gibi) dinleyecek olan ana pencereyle bağının kopuk olmasından kaynaklanıyor.
İşte bu bağı kurmak için en temiz yöntem:
Adım 1: interfacemodule.py Dosyasını Hazırlamak
interfacemodule.py dosyasını aç ve Interface sınıfının en başına, __init__ fonksiyonunun içine yeni bir değişken ekle. Bu değişken, ana oyun penceresini hafızasında tutacak.
[CODE title="Python"]# interfacemodule.py
import ui # Gerekli importları ekle
# ... diğer importlar
class Interface(ui.ScriptWindow):
def __init__(self):
ui.ScriptWindow.__init__(self)
# ... varsa diğer kodların ...
self.mainGame = None # 1. ADIM: Ana oyun penceresini saklamak için bir yer ayır.
def __del__(self):
ui.ScriptWindow.__del__(self)
# 2. ADIM: Ana oyun penceresini bize tanıtacak bir fonksiyon ekle.
def BindGameClass(self, mainGame):
self.mainGame = mainGame
# 3. ADIM: Patron Takip penceresini açan fonksiyonu düzenle.
def OpenBossTracking(self):
# Eğer mainGame tanımlıysa, pencereyi onun üzerinden aç.
if self.mainGame:
self.mainGame.OpenBossTracking()[/CODE]
Adım 2: game.py (veya Ana Sınıf) Dosyasını Düzenlemek
Şimdi ana oyun sınıfının olduğu dosyayı (game.py olabilir) aç. interface nesnesini oluşturduğun yerde, az önce yazdığımız BindGameClass fonksiyonunu çağırarak aradaki köprüyü kur.
[CODE title="Python"]# game.py
import interfacemodule
# ... diğer importlar
class GameWindow(ui.ScriptWindow):
def __init__(self):
# ...
self.interface = interfacemodule.Interface()
self.interface.BindGameClass(self) # 4. ADIM: Köprüyü kur! "self" yani kendimizi (ana oyun penceresini) interface'e tanıtıyoruz.
# ...
# ...
# 5. ADIM: Patron Takip penceresini açan fonksiyonun burada olduğundan emin ol.
# Bu fonksiyonu interfacemodule'e taşımana gerek yok.
def OpenBossTracking(self):
# Patron takip penceresini açan kodlar burada olmalı.
# self.wndBossTracking = uibosstracking.BossTrackingWindow()
# self.wndBossTracking.Show()
pass
def OnKeyDown(self, key):
# ...
# F5 menüsündeki butona basıldığında artık bu çağrılacak:
# self.interface.OpenBossTracking()
# ...[/CODE]
Özetle Ne Yaptık?
F5 menüsündeki butona bastığında, olay şöyle işleyecek:
interfacemodule içindeki bu fonksiyon, içinde sakladığı self.mainGame (yani ana oyun penceresinin kendisi) üzerinden, ana oyun penceresinin kendi OpenBossTracking() fonksiyonunu çağıracak.
Böylece pencereyi yine "aile reisi" açmış olacak ve pencere "yetim" kalmayacak. Tıklamalar sorunsuz çalışacak.
Bu yöntemle hem kodun daha düzenli olur hem de bu tür "tıklanmama" sorunlarını kökünden çözmüş olursun.