Opublikowano 10 Stycznia 20241 r Cześć. Ostatnio stworzyłem swoje GUI, pod pewien system informacji o randze, który kiedyś może zaimplementuje. Można zrobić to lepiej, chociażby poprzez jakiś button w oknie characterwindow, w miejscu gdzie jest ranga. Ale uczę się, także jest jak jest. Problem jest w tym, że próbuje podpiąć owe gui żeby wyświetlało mi się po wcisnieciu przycisku w panelu bocznym. Error jaki wyświetla mi się po naciśnięciu klawisza "i" po wejsciu na serwer. Spoiler 0110 17:34:14940 :: Failed to load script file : uiscript/aligninfo.py 0110 17:34:14940 :: error : No file or directory 0110 17:34:14940 :: ui.py(line:3203) LoadScriptFile system.py(line:176) execfile system.py(line:145) Run system.py(line:160) __LoadTextFile__ system.py(line:56) __init__ LoadScriptFile1 - <type 'exceptions.IOError'>:No file or directory 0110 17:34:14940 :: ============================================================================================================ 0110 17:34:14940 :: Abort!!!! 0110 17:34:14940 :: filename = exception.py, name = Abort 0110 17:34:14940 :: filename = ui.py, name = LoadScriptFile 0110 17:34:14940 :: filename = uialigninfo.py, name = __LoadWindow 0110 17:34:14940 :: filename = uialigninfo.py, name = __init__ 0110 17:34:14940 :: filename = uiInventory.py, name = Show 0110 17:34:14940 :: filename = interfaceModule.py, name = ToggleInventoryWindow 0110 17:34:14940 :: filename = game.py, name = <lambda> 0110 17:34:14940 :: filename = game.py, name = OnKeyDown 0110 17:34:14940 :: filename = prototype.py, name = RunApp 0110 17:34:14940 :: filename = prototype.py, name = <module> 0110 17:34:14940 :: filename = system.py, name = Run 0110 17:34:14940 :: filename = system.py, name = execfile 0110 17:34:14940 :: filename = system.py, name = RunMainScript 0110 17:34:14940 :: filename = system.py, name = <module> 0110 17:34:14940 :: filename = <string>, name = <module> Jest problem z załadowaniem pliku aligninfo.py (Pewnie po prostu nie rozpoznaje wielkich liter, ale mój plik to AlignInfo.py) Plik ui z root, bez żadnej logiki. Chciałem po prostu żeby po kliknieciu buttona otworzylo gui. Może tutaj jest coś co powoduje błąd? Spoiler import ui class AlignInfoWindow(ui.ScriptWindow): def __init__(self): ui.ScriptWindow.__init__(self) self.isLoaded = 0 self.__LoadWindow() def __del__(self): ui.ScriptWindow.__del__(self) def Show(self): self.__LoadWindow() ui.ScriptWindow.Show(self) def Open(self): self.Show() def __LoadWindow(self): if self.isLoaded == 1: return self.isLoaded = 1 pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "UIScript/AlignInfo.py") self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close)) def Destroy(self): self.alertDialog = None self.ClearDictionary() def Close(self): if self.alertDialog: self.OnCloseAlertDialog() self.Hide() def OnPressEscapeKey(self): self.Close() return TRUE W uiinventory wiadomo: 1) self.ranga = uialigninfo.AlignInfoWindow() 2)self.nowyButton12 = self.GetChild2("Button12") 3)self.nowyButton12.SetEvent(ui.__mem_func__(self.Ranga)) 4) def Ranga(self): if self.ranga.IsShow(): self.ranga.Close() else: self.ranga.Open() Film przedstawiający problem: Spoiler 2024-01-10 17-51-07.mp4
Opublikowano 11 Stycznia 20241 r Nazwa samego pliku jeśli chodzi o wielkość liter nie powinna powodować problemu. Specjalistą nie jestem, ale z ostatniego doświadczenia mogę powiedzieć, że możliwy jest błąd w ścieżce w którymś z plików. Tam wielkość liter ma znaczenie. Spróbuj zmienić na UIScript/align.. jeśli to nie pomoże, jak wrócę z pracy dzisiaj przysiade i pomogę jak będę mógł, o ile nie będzie rozwiązane do tego czasu 🙂 .
Opublikowano 11 Stycznia 20241 r Rozwiązanie W klasie, którą przedstawiłeś, nie widzę żadnych poważnych błędów. Jedynie w metodzie Show() możesz sprawdzić, czy okno zostało załadowane. Główny problem dotyczy ładowania skryptu uiscript/aligninfo.py, który masz z dużymi literami. Zaktualizuj nazwę skryptu na małe litery. Jeśli chcesz zachować duże litery w nazwie skryptu, możliwe jest, że packer, którego używasz, konwertuje nazwy wszystkich plików na małe litery, co powoduje ten problem. W uiinventory w momencie wywołania musisz mieć zaimportowany plik align. class AlignInfoWindow(ui.ScriptWindow): def __init__(self): ui.ScriptWindow.__init__(self) self.isLoaded = 0 self.__LoadWindow() def __del__(self): ui.ScriptWindow.__del__(self) def Show(self): if not self.isLoaded: #tu możesz sprawdzić czy okno jest już otwarte przed wywołaniem loadwindow self.__LoadWindow() ui.ScriptWindow.Show(self) def Open(self): self.Show() def __LoadWindow(self): if self.isLoaded: # tu warunek można uprościć ten jest równoznaczny z if self.IsLoaded == 1 return self.isLoaded = 1 pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "uiscript/aligninfo.py") #zaktualizuj na małe litery tu oraz w faktycznej nazwie skryptu self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close)) def Destroy(self): self.alertDialog = None self.ClearDictionary() def Close(self): if self.alertDialog: self.OnCloseAlertDialog() self.Hide() def OnPressEscapeKey(self): self.Close() return TRUE