Metin2 Hungarian Forum

Metin2 => Szerver készítés => Privát szerverek => Segítség => A témát indította: szabika1232 - 2018-02-11, 15:17:16

Cím: Több ablak, mint kellene..
Írta: szabika1232 - 2018-02-11, 15:17:16
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
(click to show/hide)
uitesztwindow.py
(click to show/hide)

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!
Cím: Re:Több ablak, mint kellene..
Írta: [VIP]Disco - 2018-02-11, 15:30:16
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.
Cím: Re:Több ablak, mint kellene..
Írta: szabika1232 - 2018-02-11, 16:12:05
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.
Cím: Re:Több ablak, mint kellene..
Írta: 5310pati - 2018-02-11, 17:02:51
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 = NoneKicsit 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()
Cím: Re:Több ablak, mint kellene..
Írta: szabika1232 - 2018-02-11, 17:06:06
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?
Cím: Re:Több ablak, mint kellene..
Írta: TiuXin - 2018-02-11, 17:08:19
(https://i.imgur.com/cUborQd.png)

Lehet azért mert bezárja elvileg az ablakot? ???
Cím: Re:Több ablak, mint kellene..
Írta: szabika1232 - 2018-02-11, 17:30:03
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. :/
Cím: Re:Több ablak, mint kellene..
Írta: 5310pati - 2018-02-11, 17:37:04
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.
Cím: Re:Több ablak, mint kellene..
Írta: szabika1232 - 2018-02-11, 17:58:24
Van rá valami megoldás, vagy vegyem ki és felejtsem el?
Cím: Re:Több ablak, mint kellene..
Írta: 5310pati - 2018-02-11, 18:31:57
Ha nem hozod elő a switchbotot, akkor alapjáraton működik az esc v úgy se?
Cím: Re:Több ablak, mint kellene..
Írta: szabika1232 - 2018-02-11, 18:33:35
Úgy működik, de miután behozom, már nem.
Cím: Re:Több ablak, mint kellene..
Írta: 5310pati - 2018-02-11, 18:41:41
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.
Cím: Re:Több ablak, mint kellene..
Írta: szabika1232 - 2018-02-11, 18:55:10
(click to show/hide)
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?
Cím: Re:Több ablak, mint kellene..
Írta: 5310pati - 2018-02-11, 18:59:35
uiinventoryból copyztam ki, ugyanaz mint ami a képen van feljebb.
def OnPressEscapeKey(self):
self.Close()
return True
Cím: Re:Több ablak, mint kellene..
Írta: szabika1232 - 2018-02-11, 19:26:45
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?  >:(
Cím: Re:Több ablak, mint kellene..
Írta: 5310pati - 2018-02-11, 19:37:10
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.
Cím: Re:Több ablak, mint kellene..
Írta: szabika1232 - 2018-02-11, 20:01:34
Hát ez nem jön össze :x
Cím: Re:Több ablak, mint kellene..
Írta: Pisti95 - 2018-02-11, 22:36:00
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á.
Cím: Re:Több ablak, mint kellene..
Írta: [VIP]Disco - 2018-02-13, 11:54:49
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)