You last visited: Today at 23:54
Advertisement
[Release] "TabView"-Klasse [Python UI Erweiterung]
Discussion on [Release] "TabView"-Klasse [Python UI Erweiterung] within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.
09/07/2015, 19:35
#1
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,765
[Release] "TabView"-Klasse [Python UI Erweiterung]
Was kann das Ding?
Ihr könnt einstellen, wie viele Elemente pro Seite angezeigt werden sollen, wie groß der Abstand zwischen den einzelnen Elementen sein soll und ganz bequem durch mehrere GUI Elemente gehen
Screens
Image galleries require a modern browser with JavaScript enabled. Please make sure that your browser is up to date and/or enable JavaScript to view this gallery.
Code:
class ArrowButton(ui.Button):
def __init__(self, arrowDirection):
ui.Button.__init__(self)
self.SetUpVisual("d:/ymir work/ui/public/xsmall_button_01.sub")
self.SetOverVisual("d:/ymir work/ui/public/xsmall_button_02.sub")
self.SetDownVisual("d:/ymir work/ui/public/xsmall_button_03.sub")
if arrowDirection == "Left":
self.SetText("<<")
else:
self.SetText(">>")
class TabView(ui.Window):
__tabHolder = None
__leftButton = None
__rightButton = None
__buttonToTabSpacing = None
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#Private inner class TabHolder @
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
class __TabHolder(ui.Window):
__tabs = None
__showingTabStartIndex = None
__tabShowCount = None
__spacing = None
def __init__(self, tabs, tabShowCount, spacing):
ui.Window.__init__(self)
self.__tabs = tabs
self.__showingTabStartIndex = 0
self.__tabShowCount = tabShowCount
self.__spacing = spacing
self.__UpdateGUI()
#@@@@@@@@@@@@@@@@@@@@@@@@@@
#Externe Zugriffe @@@@@@@@@
def IsNextAvailable(self):
return self.__IsIndexAvailable(self.__showingTabStartIndex + 1)
def IsPreviousAvailable(self):
return self.__IsIndexAvailable(self.__showingTabStartIndex - 1)
def GetShowingTabStartIndex(self):
return self.__showingTabStartIndex
def GetTabShowCount(self):
return self.__tabShowCount
def GetSpacing(self):
return self.__spacing
def Next(self):
if not self.IsNextAvailable():
return
self.__ShowStartIndex(self.__showingTabStartIndex + 1)
def Previous(self):
if not self.IsPreviousAvailable():
return
self.__ShowStartIndex(self.__showingTabStartIndex - 1)
def SetTabs(self, tabs):
self.__tabs = tabs
self.__ShowStartIndex(0)
def SetTabShowCount(self, tabShowCount):
self.__tabShowCount = tabShowCount
self.__ShowStartIndex(0)
def SetSpacing(self, spacing):
self.__spacing = spacing
self.__ShowStartIndex(0)
#@@@@@@@@@@@@@@@@@@@@@@@@@@
def __UpdateGUI(self):
self.__Reset()
isFirst = True
for i in xrange(self.__showingTabStartIndex, self.__showingTabStartIndex + self.__tabShowCount):
tab = self.__tabs[i]
spacing = self.__spacing
if isFirst:
spacing = 0
isFirst = False
tab.SetParent(self)
tab.SetPosition(self.GetWidth() + spacing, 0)
tab.Show()
self.SetSize(self.GetWidth() + spacing + tab.GetWidth(), max(self.GetHeight(), tab.GetHeight()))
def __HideAll(self):
for tab in self.__tabs:
tab.Hide()
def __ResetSize(self):
self.SetSize(0, 0)
def __Reset(self):
self.__HideAll()
self.__ResetSize()
def __ShowStartIndex(self, tabIndex):
if not self.__IsIndexAvailable(tabIndex):
return
self.__showingTabStartIndex = tabIndex
self.__UpdateGUI()
def __IsIndexAvailable(self, index):
if index < 0:
return False
if index + self.__tabShowCount > len(self.__tabs):
return False
return True
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
def __init__(self, tabs, tabShowCount, tabSpacing = 10, buttonToTabSpacing = 10):
ui.Window.__init__(self)
self.__buttonToTabSpacing = buttonToTabSpacing
self.__tabHolder = self.__TabHolder(tabs, tabShowCount, tabSpacing)
self.__tabHolder.SetParent(self)
self.__tabHolder.Show()
self.__leftButton = ArrowButton("Left")
self.__leftButton.SetParent(self)
self.__leftButton.SetEvent(self.__OnLeftButtonClick)
self.__leftButton.Show()
self.__rightButton = ArrowButton("Right")
self.__rightButton.SetParent(self)
self.__rightButton.SetEvent(self.__OnRightButtonClick)
self.__rightButton.Show()
self.__UpdateStructure()
self.__UpdateGUI()
#@@@@@@@@@@@@@@@@@@@@@@@@@@
#Externe Zugriffe @@@@@@@@@
def IsNextAvailable(self):
return self.__tabHolder.IsNextAvailable()
def IsPreviousAvailable(self):
return self.__tabHolder.IsPreviousAvailable()
def GetShowingTabStartIndex(self):
return self.__tabHolder.GetShowingTabStartIndex()
def GetTabShowCount(self):
return self.__tabHolder.GetTabShowCount()
def GetButtonToTabSpacing(self):
return self.__buttonToTabSpacing
def GetSpacing(self):
return self.__tabHolder.GetSpacing()
def Next(self):
self.__tabHolder.Next()
def Previous(self):
self.__tabHolder.Previous()
def SetTabs(self, tabs):
self.__tabHolder.SetTabs(tabs)
def SetTabShowCount(self, tabShowCount):
self.__tabHolder.SetTabShowCount(tabShowCount)
def SetSpacing(self, spacing):
self.__tabHolder.SetSpacing(spacing)
#@@@@@@@@@@@@@@@@@@@@@@@@@@
def __UpdateStructure(self):
leftButtonWidth = self.__leftButton.GetWidth()
leftButtonHeight = self.__leftButton.GetHeight()
tabHolderWidth = self.__tabHolder.GetWidth()
tabHolderHeight = self.__tabHolder.GetHeight()
rightButtonWidth = self.__rightButton.GetWidth()
rightButtonHeight = self.__rightButton.GetHeight()
midPosition = (tabHolderHeight / 2) - (max(leftButtonHeight, rightButtonHeight) / 2)
self.__leftButton.SetPosition(0, midPosition)
self.__tabHolder.SetPosition(leftButtonWidth + self.__buttonToTabSpacing, 0)
self.__rightButton.SetPosition(leftButtonWidth + self.__buttonToTabSpacing + tabHolderWidth + self.__buttonToTabSpacing, midPosition)
self.SetSize(leftButtonWidth + self.__buttonToTabSpacing + tabHolderWidth + self.__buttonToTabSpacing + rightButtonWidth, max(self.GetHeight(), tabHolderHeight))
def __UpdateGUI(self):
if self.IsPreviousAvailable():
self.__leftButton.Show()
else:
self.__leftButton.Hide()
if self.IsNextAvailable():
self.__rightButton.Show()
else:
self.__rightButton.Hide()
def __OnLeftButtonClick(self):
self.Previous()
self.__UpdateGUI()
def __OnRightButtonClick(self):
self.Next()
self.__UpdateGUI()
Special Thanks: Poccelix - für Deine Hilfe mit dem ganzen Python Kram
DasSchwarzeT - same
Kori - same
Yiv - weil Jiff
Akkelos - weil du gesagt hast, dass das in Ordnung aussieht
Lee - weil er hier stehen möchte
09/07/2015, 19:35
#2
elite*gold: 192
Join Date: Aug 2009
Posts: 5,797
Received Thanks: 3,141
Wo sind meine special thänks? Habe doch gesagt, es ist toll
09/07/2015, 19:36
#3
elite*gold: 6
Join Date: Feb 2010
Posts: 2,779
Received Thanks: 4,267
Joa, sieht ganz in Ordnung aus.
09/07/2015, 19:37
#4
elite*gold: 47
Join Date: Feb 2012
Posts: 2,282
Received Thanks: 2,579
Akkelos, größte Lüge!
Haste gut gemacht, hoffe mal, dass du dein Projekt bald fertig hast
MfG
09/07/2015, 19:38
#5
elite*gold: 44
Join Date: Dec 2009
Posts: 1,696
Received Thanks: 3,833
Quote:
Originally Posted by
Seחsi
Einsicht ist vorhanden.
--
Vielen Dank.
09/07/2015, 19:38
#6
elite*gold: 192
Join Date: Aug 2009
Posts: 5,797
Received Thanks: 3,141
Quote:
Originally Posted by
Alekos
Joa, sieht ganz in Ordnung aus.
Quote:
Originally Posted by
Yiv
Akkelos, größte Lüge!
Haste gut gemacht, hoffe mal, dass du dein Projekt bald fertig hast
MfG
ER kann doch nur lügen . Weißt du wieso?
deswegen!
Aber ja. Das Projekt was er am start hat ist mega. wird bestimmt auch pub #nicht
09/07/2015, 19:48
#7
elite*gold: 1
Join Date: Apr 2013
Posts: 273
Received Thanks: 236
Das sieht doch schon ganz gut aus
. Als kleine Erweiterung würde ich noch hinzufügen, dass das Ganze auch an der Y-Achse möglich ist.
Mfg
Copy
09/07/2015, 20:32
#8
elite*gold: 0
Join Date: Jun 2012
Posts: 58
Received Thanks: 14
You should put an example... For the people who don't know.
09/07/2015, 23:37
#9
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,765
Quote:
Originally Posted by
LordMG
You should put an example... For the people who don't know.
So benutze ich es:
Code:
self.__tabs = []
for i in xrange(20):
self.__tabs.append(self.__ItemTab())
self.itemTabWindow = TabView(self.__tabs, GUI_SETTINGS["TAB"]["COUNT_PER_PAGE"], 10, 10)
self.itemTabWindow.SetParent(self)
self.itemTabWindow.SetPosition(10, 35)
self.itemTabWindow.Show()
Zum Erzeugen musst du eine List mit allen GUI-Elementen die angezeigt werden sollen übergeben, als 2. Parameter wie viele Elemente gleichzeitig angezeigt werden sollen, als 3. Parameter wie viel Pixel Abstand zwischen den einzelnen Elementen sein soll und als 4. Parameter, wie viel Abstand die Elemente an 1. und letzter Position zu den Buttons haben sollen
09/10/2015, 08:58
#10
elite*gold: 0
Join Date: Sep 2014
Posts: 44
Received Thanks: 5
Very good
All times are GMT +2. The time now is 23:55 .