Skocz do zawartości
Opublikowano

Cześć.

Ostatnio stworzyłem swoje GUI, pod pewien system informacji o randze, który kiedyś może zaimplementuje.

obraz.png.160881bde56cd39e37012e0e8dc46948.png

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

 

Rozwiązane przez Sevence

Przejdź do rozwiązania

Featured Replies

Opublikowano

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
  • 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

 

  • Sevence zablokował(a) ten temat
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.