Sziasztok!
Viccesen hangzik, de már több mint 1 napja szenvedek egy olyan problémával, amit valószínűleg a világon a legegyszerűbb megoldani.
A képen látszik, hogy 2 ablak van megnyitva.
Nos, ez az egész "rendszer" az f5 billentyűre van rakva, és amikor megnyomom előhoz egy ablakot, viszont, ha megint megnyomom újra előhoz egy ablakot, nem pedig bezárja.
A célom az lenne, hogy ha egyszer lenyomom az f5-öt behozza az ablakot,ha megint megnyomom bezárja.
Game.py
[spoiler]
def __TesztGomb(self):
import uitesztwindow
#import net
#net.SendChatPacket("Fekete_chat")--Csak teszt volt, hogy működik-e a gomb.
a = uitesztwindow.TesztWindow()
if constInfo.teszt11 == 0:
constInfo.teszt11 = 1-----A cosntinfoban természetesen ott a teszt11 = 0
a.Show()
elif constInfo.teszt11 == 1:
constInfo.teszt11 = 0
a.Close()
[/spoiler]
uitesztwindow.py
[spoiler]
import ui
class TesztWindow(ui.Window):
def __init__(self):
ui.Window.__init__(self)
self.BuildWindow()
def __del__(self):
ui.Window.__del__(self)
def Show(self):
ui.Window.Show(self)
def Close(self):
self.Board.Hide()
return TRUE
def BuildWindow(self):
self.Board = ui.BoardWithTitleBar()
self.Board.SetSize(200, 200)
self.Board.SetCenterPosition()
self.Board.AddFlag('movable')
self.Board.AddFlag('float')
self.Board.SetTitleName('Szeretem az őSZt!')
self.Board.SetCloseEvent(self.Close)
self.Board.Show()
def OnPressEscapeKey(self):
self.Close()
return TRUE
# END
[/spoiler]
Próbáltam ezer másik switchbotról,killguiról lemásolni ezt a részt, de folyton 10+ ablakkal lépek ki a játékból és megyek vissza a googlehez..
Nem vagyok egy nagy mestere a pythonnak, miközben keresgélek mennek a tutorialok, de erről semmit nem találtam..Lehet velem van a baj, de tényleg eltöltöttem legalább 2órát a keresgéléssel. Tudom, hogy nem fognak/fogtok minden megcsinálni helyettem(és nem is szeretném ezt), de tényleg elkelne egy kis segítség. :'D
#Nemleszélesszerver >:( :(
Remélem érthető a gondom, és a célom is.
Előre is köszönöm az értelmes, segítőkész válaszokat!
Több probléma is van ebben, de vegyük őket sorba.
1. Ne game-ben csinálj ablakot, hanem interfacemodule-ban.
2. Felül az __init__ függvényben hozz létre egy változót az ablaknak, például ezt: self.testWindow = None
3. A funkcióban ennek a változónak add meg az ablak értékét, ne pedig hozz létre egy újat.
Tehát:
import uitesztwindow
def ToggleTestWindow(self):
if not self.testWindow:
self.testWindow = uitesztwindow.TesztWindow()
self.testWindow.Show()
return
if self.testWindow.IsShow():
self.testWindow.Hide()
else:
self.testWindow.Show()
Az interfacemodule-ban lévő Close-ba pedig írd bele, hogy a testWindow is bezáródjon, különben kilépésnél ott fog maradni.
Idézetet írta: [VIP]Disco Dátum 2018-02-11, 15:30:16
1. Ne game-ben csinálj ablakot, hanem interfacemodule-ban.
Ezt, hogy érted? Az ablak egy külön .py fájlban van, a game-ben csak az van, hogy az f5 lenyomásakor mi történjen.
Sztem felesleges az interfacebe nyúlkálni, én csak game-ben oldom meg a dolgot.
class GameWindow(ui.ScriptWindow):
def __init__(self, stream):
ide létrehozol 1 új változót pl
self.switchbot = None
Kicsit lejjebbmész a bezáráshoz
def Close(self):
és ide is bemásolod ugyanazt a kódot mint előbb, majd jöhet a megnyitás.
def Switchbot(self):
if not self.switchbot:
self.switchbot = pyfájlneve.classneve()
if self.switchbot.IsShow():
self.switchbot.Close()
else:
self.switchbot.Show()
Sikerül megoldanom, kicsit másképp, mint ahogy leírtátok, de működik.
Egy olyan kérdésem lenne még, hogy miután megnyitom ezt az ablakot és megnyomom az ESC-et, miért nem hozza be a megszokott menüt?
(https://i.imgur.com/cUborQd.png)
Lehet azért mert bezárja elvileg az ablakot? ???
Fogalmam sincs, hogy mi az ESC nem működésének oka.
(https://i.imgur.com/cUborQd.png)
Ezt azért raktam bele, hogy az ESC-vel is betudjam zárni az ablakot.
Lényegében, mint a leltárnál. Ha meg van nyitva és megnyomod az ESC-t bezárja a leltárt, ha újra megnyomod előjön a menü.
Nálam az ESC semmit nem csinál, miután megnyitom az ablakot és bezárom. :/
Vmi mással akadhat össze mert nálam tök szépen workingel a dolog.
Akár Esc-el zárom be az ablakot, akár ki X-elem utána ugyanúgy jó az Esc továbbra is.
Van rá valami megoldás, vagy vegyem ki és felejtsem el?
Ha nem hozod elő a switchbotot, akkor alapjáraton működik az esc v úgy se?
Úgy működik, de miután behozom, már nem.
Akkor esetleg mutasd meg mi az a másik mód ahogy megoldottad.
Csak arra tudok tippelni mivel amit én leírtam korábbi hsz-emben azzal tökéletesen működik és az esc-et se rontja el.
[spoiler]
if not self.testWindow:
self.testWindow = uibonus.BonusWindow()
self.testWindow.Show()
return
if self.testWindow.IsShow():
self.testWindow.Close()
self.testWindow = None
[/spoiler]
Annyit változtattam, hogy ezt: self.testWindow = None nem a def Close részhez raktam, mert így működik csak.
Megnézdnéd nekem, hogy az OnPressEscapeKey funkcióhoz neked mi van írva?
uiinventoryból copyztam ki, ugyanaz mint ami a képen van feljebb.
def OnPressEscapeKey(self):
self.Close()
return True
Mostmár működik az ESC is, viszont ha ezzel lépek ki, akkor kétszer kell f5-öt nyomnom, mivel gondolom nem állítja vissza a self.testWindow "None" értékre.
Erre valami megoldás? >:(
Mert te másképp írtad meg azért nem jó.
Nálam a Close és Show állít 1 változót
def Show(self):
self.show = True
ui.ScriptWindow.Show(self)
def Close(self):
self.show = False
self.ClearAll()
self.Hide()
amit az IsShow ad vissza, így tudom h nyitva van-e v sem.
def IsShow(self):
return self.show
És ez alapján írtam a kódot a megnyitásra:
def WhisGradeUpgrade(self):
if not self.whisgrade:
self.whisgrade = uiWhisGrade.WhisGradeWindow()
if self.whisgrade.IsShow():
self.whisgrade.Close()
else:
self.whisgrade.Show()
Ha még nincs ilyen ablak, azaz 1. lefutásról van szó, akkor létrehozza, alapból False értéken van a show, tehát az else ág fog lefutni így egyből megnyitja az ablakot.
Utána már csak váltakozva fut le kód.
Felesleges töröltetni az ablakot minden bezárásnál, elég a Show/Hide.
Hát ez nem jön össze :x
hm?? ???
if a.IsShow():
a.Close()
constinfo fv-t felejtsd el belőle, a kliens nem tud olyan gyorsan értéket átírni.
Még game.py-on belül lehet globális változót is használni, több mód van rá.
Nekem alapból létezik IsShow, de ha nektek nincs:
ui.py Window classba ezt kell betenni:
def IsShow(self):
return wndMgr.IsShow(self.hWnd)