This commit is contained in:
Gabor Körber 2018-10-17 00:50:13 +02:00
commit c22bf1881e
14 changed files with 1185947 additions and 0 deletions

0
src/empyres/__init__.py Normal file
View File

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,32 @@
version="Cherryh v2.0.2"
version_control_revision=38784
name="Viperian Aspire"
date="2218.01.01"
required_dlcs={
"Anniversary Portraits"
"Apocalypse"
"Horizon Signal"
"Humanoids Species Pack"
"Leviathans Story Pack"
"Synthetic Dawn Story Pack"
"Utopia"
}
player_portrait="humanoid_hp_09"
flag={
icon={
category="zoological"
file="flag_zoological_20.dds"
}
background={
category="backgrounds"
file="pattern_01.dds"
}
colors={
"black"
"burgundy"
"null"
"null"
}
}
meta_fleets=3.000
meta_planets=1

278
src/empyres/empires.py Normal file
View File

@ -0,0 +1,278 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
Stellaris Empires Parser
this is a fairly dumb parser that can parse stellaris empires from the user_empire_designs.txt, if they are set up per default
it might not reflect the total logic of paradox' internal scripting language however.
it preserves the orders, gives ability to modify values, and translates most into python
it also has the ability to dump it back into a string, which is ready to be written back.
First Draft written in Py2, PyQt4
Created on 07.04.2017
moving to py3 and qt5
@author: g4b.org
'''
import os, sys, logging
DEFAULT_WIN_EMPIRES_PATH = r'Paradox Interactive\Stellaris\user_empire_designs.txt'
OUTPUT_LINE_FEED = '\r\n'
class _ConstantCache:
""" datamines constants """
def __init__(self):
self._cached = []
self.cached = set()
self.associations = {}
def add(self, value):
self._cached.append(value)
self.cached = set(self._cached)
self._cached = list(self.cached)
def associate(self, key, value):
self.associations[key] = set(list(self.associations.get(key, [])) + [value,])
_CONSTANT_CACHE = _ConstantCache()
class Constant:
""" constants are not strings, but we need to save them somehow. """
def __init__(self, value):
self.value = value
_CONSTANT_CACHE.add(value)
@classmethod
def show_cache(cls):
return _CONSTANT_CACHE.cached
@classmethod
def associate(cls, key, value):
_CONSTANT_CACHE.associate(key, value)
@classmethod
def get_associations(cls):
return _CONSTANT_CACHE.associations
def render_value(value):
""" renders internal python values to stellaris values, but keeps the tree as list of lists and strings """
if isinstance(value, bool):
return ['%s' % 'yes' if value else 'no']
elif isinstance(value, int):
return ['%s' % value]
elif isinstance(value, basestring): # note: python 3 might not have basestring anymore?
return ['"%s"' % value]
elif isinstance(value, list):
return ['{',] + [render_value(entry) for entry in value] + ['}' ]
elif isinstance(value, Entry):
return value.render()
elif isinstance(value, Constant):
return ['%s' % value.value]
else:
logging.warning('Unknown Value type: %s' % (str(type(value)),))
def build_final_string(data):
""" builds a final output from render data. """
def indent(value, ind):
if not ind:
return value
ind = ind * ' '
return '%s%s' % (ind, value)
final = []
def append_final_list(data, cur):
for entry in data:
if isinstance(entry, basestring):
final.append(indent(entry, cur))
elif isinstance(entry, list):
append_final_list(entry, cur + 2)
else:
logging.error('Unknown Type in final list: %s' % (str(type(entry)),))
append_final_list(data, 0)
return OUTPUT_LINE_FEED.join(final)
class Entry:
""" class for holding an entry in stellaris format """
def __init__(self, key, value):
self.key = key
self.value = value
@classmethod
def identify_value(cls, value, key=None):
""" Note: Value cannot be a list.
key is only used to track constants and used internally.
"""
if value.startswith('"'):
return value[1:-1]
elif value in ['yes', 'no']:
return True if value == 'yes' else False
else:
try:
x = int(value)
return x
except:
if key is not None:
# if key is given, it only is used to associate the constant with it.
c = Constant(value)
Constant.associate(key, value)
return c
return Constant(value)
def parse(self, lines):
# parses until it has its data, returns lines of buffer it ate.
count = 0
skip = 0
my_value = []
for line in lines:
count += 1
if skip>0:
skip -= 1
continue
line = line.replace('\t', ' ' * 4)
line = line.lstrip(' ')
# search for key = value or (key)={
if line.startswith('='):
# this seems to be a ={
continue
elif '=' in line:
key = line[:line.index('=')].strip()
value = line[line.index('=')+1:].strip()
# if its a simple entry, add it to me.
# if its a {, we need to create a new entry with key, give it the rest of the buffer
if value.startswith('{'):
entry = Entry(key, None)
skip = entry.parse(lines[count:])
my_value.append(entry)
continue
else:
entry = Entry(key, Entry.identify_value(value, key))
my_value.append(entry)
continue
elif line.startswith('}'):
# if its a } we are at the end of our duty.
break
else:
my_value.append(Entry.identify_value(line))
self.value = my_value
return count
def render(self):
val = render_value(self.value)
ret = [ '%s=%s' % (self.key or '', val[0]) ]
if len(val)>1:
ret += [val[1:-1], val[-1]]
return ret
def get_values(self, key, default=None):
""" retrieves the list of all values in the entry by key,
as long as the value of this entry is a list of entries.
"""
if isinstance(self.value, list):
ret = []
for entry in self.value:
if isinstance(entry, Entry):
if entry.key == key:
ret.append(entry.value)
return ret or default
return default
class Empire:
"""
A Stellaris Empire configuration.
"""
def __init__(self, name=None):
self.name = name
self.entry = None
def get_values(self, key, default=None):
""" use this function if you want to get a specific value from the root entry. convenience function """
if self.entry is None:
return default
return self.entry.get_values(key, default)
def parse(self, buff):
""" parse my entry from a buffer """
count = 0
if isinstance(buff, str):
buff = buff.replace('\r', '').split('\n')
if self.name is None:
for line in buff:
count += 1
if line.startswith('"'):
self.name = Entry.identify_value(line)
buff = buff[count:]
break
self.entry = Entry(None, None)
return count + self.entry.parse(buff)
def dump(self):
if self.entry is None:
return ""
if self.name is None:
return ""
return ('"%s"%s' % (self.name or '', OUTPUT_LINE_FEED)) + build_final_string(self.entry.render())
def __unicode__(self):
return '%s' % self.name
class UserEmpireDesigns:
"""
main class for loading user empire designs.
"""
def __init__(self, filename):
self.empires = []
self.filename = filename
if filename is not None:
self.parse_file()
def all(self):
return self.empires
def parse_lines(self, lines):
while len(lines) > 2: # makes no sense below 2 lines.
empire = Empire()
c = empire.parse(lines)
lines = lines[c:]
self.empires.append(empire)
logging.debug( "Read %s empires" % len(self.empires) )
def parse_file(self):
f = open(self.filename, 'r')
data = f.read()
f.close()
lines = data.replace('\r', '').split('\n')
self.parse_lines(lines)
def dump(self):
ret = []
for empire in self.empires:
ret.append(empire.dump())
return OUTPUT_LINE_FEED.join(ret)
def load_empires(filename=None):
if filename is None:
folder = find_folder_win()
filename = os.path.join( folder, DEFAULT_WIN_EMPIRES_PATH )
#print(f'Folder: {folder} Filename: {filename}')
return UserEmpireDesigns(filename)
def find_folder_win(folder_id=5, current=0):
""" Finds My Documents in windows """
import ctypes.wintypes
CSIDL_PERSONAL = folder_id # My Documents = 5
SHGFP_TYPE_CURRENT = current # Unclear, but 1 means current, 0 default!?
buf= ctypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH)
ctypes.windll.shell32.SHGetFolderPathW(None, CSIDL_PERSONAL, None, SHGFP_TYPE_CURRENT, buf)
return buf.value
if __name__ == '__main__':
# if u run this script, it basicly parses the file and outputs a list of your empires, a dump, and the constants it found.
logging.basicConfig(level=logging.DEBUG)
empires = load_empires()
for empire in empires.all():
print ("%s traits: %s ethics: %s" % (empire.name,
', '.join([ x.replace('trait_', '') for x in empire.entry.get_values('trait')]),
', '.join([ x.replace('ethic_', '') for x in empire.entry.get_values('ethic')]),
))
print ("#" * 80)
print (empires.dump())
print ("CONSTANTS:")
print (Constant.show_cache())
print (Constant.get_associations())

116
src/empyres/empires_ui.py Normal file
View File

@ -0,0 +1,116 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'E:/work/workspace/stellaris_empyres/src/empyres/empires_ui.ui'
#
# Created by: PyQt5 UI code generator 5.8.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1081, 623)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setSizeConstraint(QtWidgets.QLayout.SetMaximumSize)
self.verticalLayout.setObjectName("verticalLayout")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.tabWidget.sizePolicy().hasHeightForWidth())
self.tabWidget.setSizePolicy(sizePolicy)
self.tabWidget.setObjectName("tabWidget")
self.tab_main = QtWidgets.QWidget()
self.tab_main.setObjectName("tab_main")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.tab_main)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.tableWidget = QtWidgets.QTableWidget(self.tab_main)
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(7)
self.tableWidget.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(3, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(4, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(5, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(6, item)
self.verticalLayout_2.addWidget(self.tableWidget)
self.verticalLayout_3.addLayout(self.verticalLayout_2)
self.tabWidget.addTab(self.tab_main, "")
self.verticalLayout.addWidget(self.tabWidget)
self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1081, 21))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.actionOpen = QtWidgets.QAction(MainWindow)
self.actionOpen.setObjectName("actionOpen")
self.actionSave_As = QtWidgets.QAction(MainWindow)
self.actionSave_As.setObjectName("actionSave_As")
self.actionExit = QtWidgets.QAction(MainWindow)
self.actionExit.setObjectName("actionExit")
self.menuFile.addAction(self.actionOpen)
self.menuFile.addAction(self.actionSave_As)
self.menuFile.addSeparator()
self.menuFile.addAction(self.actionExit)
self.menubar.addAction(self.menuFile.menuAction())
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Stellaris Empire Tool Interface"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "Action"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "Name"))
item = self.tableWidget.horizontalHeaderItem(2)
item.setText(_translate("MainWindow", "Traits"))
item = self.tableWidget.horizontalHeaderItem(3)
item.setText(_translate("MainWindow", "Ethics"))
item = self.tableWidget.horizontalHeaderItem(4)
item.setText(_translate("MainWindow", "Civics"))
item = self.tableWidget.horizontalHeaderItem(5)
item.setText(_translate("MainWindow", "Homeworld"))
item = self.tableWidget.horizontalHeaderItem(6)
item.setText(_translate("MainWindow", " "))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_main), _translate("MainWindow", "Empires"))
self.menuFile.setTitle(_translate("MainWindow", "File"))
self.actionOpen.setText(_translate("MainWindow", "Open"))
self.actionSave_As.setText(_translate("MainWindow", "Save As..."))
self.actionExit.setText(_translate("MainWindow", "Exit"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

129
src/empyres/empires_ui.ui Normal file
View File

@ -0,0 +1,129 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1081</width>
<height>623</height>
</rect>
</property>
<property name="windowTitle">
<string>Stellaris Empire Tool Interface</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="sizeConstraint">
<enum>QLayout::SetMaximumSize</enum>
</property>
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab_main">
<attribute name="title">
<string>Empires</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="0">
<item>
<widget class="QTableWidget" name="tableWidget">
<column>
<property name="text">
<string>Action</string>
</property>
</column>
<column>
<property name="text">
<string>Name</string>
</property>
</column>
<column>
<property name="text">
<string>Traits</string>
</property>
</column>
<column>
<property name="text">
<string>Ethics</string>
</property>
</column>
<column>
<property name="text">
<string>Civics</string>
</property>
</column>
<column>
<property name="text">
<string>Homeworld</string>
</property>
</column>
<column>
<property name="text">
<string> </string>
</property>
</column>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1081</width>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
</property>
<addaction name="actionOpen"/>
<addaction name="actionSave_As"/>
<addaction name="separator"/>
<addaction name="actionExit"/>
</widget>
<addaction name="menuFile"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<action name="actionOpen">
<property name="text">
<string>Open</string>
</property>
</action>
<action name="actionSave_As">
<property name="text">
<string>Save As...</string>
</property>
</action>
<action name="actionExit">
<property name="text">
<string>Exit</string>
</property>
</action>
</widget>
<resources/>
<connections/>
</ui>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

175
src/empyres/qempires.py Normal file
View File

@ -0,0 +1,175 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os, logging, sys
from PyQt5 import QtCore, QtGui, QtWidgets
import empires
import empires_ui
from single_empire import EmpireTab
class TabBar(QtWidgets.QTabBar):
''' http://stackoverflow.com/questions/9442165/pyqt-mouse-events-for-qtabwidget
example usage:
self.tabBar = TabBar()
self.tabWidget.setTabBar(self.tabBar)
self.tabBar.middleClicked.connect(self.onTabMiddleClick)
'''
middleClicked = QtCore.pyqtSignal(int)
def __init__(self):
super(QtWidgets.QTabBar, self).__init__()
self.previousMiddleIndex = -1
def mousePressEvent(self, mouseEvent):
if mouseEvent.button() == QtCore.Qt.MidButton:
self.previousIndex = self.tabAt(mouseEvent.pos())
QtWidgets.QTabBar.mousePressEvent(self, mouseEvent)
def mouseReleaseEvent(self, mouseEvent):
if mouseEvent.button() == QtCore.Qt.MidButton and \
self.previousIndex == self.tabAt(mouseEvent.pos()):
self.middleClicked.emit(self.previousIndex)
self.previousIndex = -1
QtWidgets.QTabBar.mouseReleaseEvent(self, mouseEvent)
class QEmpiresSettings:
@classmethod
def initialize(cls):
cls.icon_view = QtGui.QIcon(QtGui.QPixmap("./img/view-process-own.png"))
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = empires_ui.Ui_MainWindow()
self.ui.setupUi(self)
self.tabBar = TabBar()
self.tabBar.addTab('Empires')
self.ui.tabWidget.setTabBar(self.tabBar)
self.tabBar.middleClicked.connect(self.onTabMiddleClick)
self.user_empires = None
self.load_empires(None)
def onTabMiddleClick(self, index):
if index == 0:
return
else:
self.ui.tabWidget.removeTab(index)
#self.tabBar.removeTab(index)
def get_empire_tab(self, empire):
# this either creates a tab or gets the appropriate tabWidget entry.
for x in range(1, self.ui.tabWidget.count()):
widget = self.ui.tabWidget.widget(x)
e = getattr(widget, 'empire', None)
if e is not None and e == empire:
return widget
empire_tab = EmpireTab(empire)
self.ui.tabWidget.addTab(empire_tab, empire.name)
empire_tab.empire = empire
return empire_tab
def edit_empire(self, empire=None):
try:
# print(f"Empire is {empire}") # for some reason qt5 sends a boolean.
if not empire:
sender = self.sender()
empire = getattr(sender, 'empire', None)
if not empire:
logging.error("No Empire in Button Sender!???")
return
# open a new tab for this empire.
empire_tab = self.get_empire_tab(empire)
i = self.ui.tabWidget.indexOf(empire_tab)
if (i >= 0):
self.ui.tabWidget.setCurrentIndex(i)
except:
import traceback
traceback.print_exc()
return
def clear_table(self):
while (self.ui.tableWidget.rowCount() > 0):
self.ui.tableWidget.removeRow(0)
def fill_empires(self, empires):
self.clear_table()
for empire in empires:
table = self.ui.tableWidget
rowPosition = table.rowCount()
table.insertRow(rowPosition)
empire_buttons = QtWidgets.QWidget()
button_edit = QtWidgets.QPushButton(QEmpiresSettings.icon_view, "", empire_buttons)
button_edit.empire = empire
button_edit.clicked.connect( self.edit_empire )
"""
QWidget* pWidget = new QWidget();
QPushButton* btn_edit = new QPushButton();
btn_edit->setText("Edit");
QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
pLayout->addWidget(btn_edit);
pLayout->setAlignment(Qt::AlignCenter);
pLayout->setContentsMargins(0, 0, 0, 0);
pWidget->setLayout(pLayout);
ui.table->setCellWidget(i, 3, pWidget);
"""
table.setCellWidget(rowPosition, 0, empire_buttons)
#table.setItem(rowPosition , 0, empire_buttons)
table.setItem(rowPosition , 1, QtWidgets.QTableWidgetItem(empire.name))
table.setItem(rowPosition , 2, QtWidgets.QTableWidgetItem(', '.join([ x.replace('trait_', '').replace('_', ' ') for x in empire.get_values('trait', [])])))
table.setItem(rowPosition , 3, QtWidgets.QTableWidgetItem(', '.join([ x.replace('ethic_', '').replace('_', ' ') for x in empire.get_values('ethic', [])])))
table.setItem(rowPosition , 4, QtWidgets.QTableWidgetItem(''.join([ ', '.join([y.replace('civic_', '').replace('_', ' ') for y in x]) for x in empire.get_values('civics', [])])))
table.setItem(rowPosition , 5, QtWidgets.QTableWidgetItem('%s (%s)' % (empire.get_values('planet_name', ['?'])[0],
empire.get_values('system_name', ['?'])[0])))
table.setItem(rowPosition, 6, QtWidgets.QTableWidgetItem('%s' % (empire.get_values('species_bio', [''])[0])))
# set header.
header = table.horizontalHeader()
header.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents)
header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents)
header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents)
header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents)
header.setSectionResizeMode(4, QtWidgets.QHeaderView.ResizeToContents)
header.setSectionResizeMode(5, QtWidgets.QHeaderView.ResizeToContents)
header.setSectionResizeMode(6, QtWidgets.QHeaderView.Stretch)
def load_empires(self, filename):
try:
self.user_empires = empires.load_empires(filename)
except:
import traceback
traceback.print_exc()
logging.error("File %s could not be loaded." % filename)
return
self.fill_empires(self.user_empires.all())
###################################################
def _main():
app = QtWidgets.QApplication(sys.argv)
QEmpiresSettings.initialize()
window = MainWindow()
#window.resize(640, 480)
window.show()
return app.exec_()
def main():
r = _main()
try:
import psutil #@UnresolvedImport
except ImportError:
logging.warning('Cannot import PsUtil, terminating without cleaning up threads explicitly.')
sys.exit(r)
def kill_proc_tree(pid, including_parent=True):
parent = psutil.Process(pid)
if including_parent:
parent.kill()
me = os.getpid()
kill_proc_tree(me)
sys.exit(r)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,13 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os, logging, sys
from PyQt5 import QtCore, QtGui, QtWidgets
import single_empire_ui
class EmpireTab(QtWidgets.QWidget):
def __init__(self, empire=None, parent=None):
super(EmpireTab, self).__init__(parent)
self.empire = empire
self.ui = single_empire_ui.Ui_Form()
self.ui.setupUi(self)

View File

@ -0,0 +1,364 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'E:/work/workspace/stellaris_empyres/src/empyres/single_empire_ui.ui'
#
# Created by: PyQt5 UI code generator 5.8.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(892, 595)
self.verticalLayout = QtWidgets.QVBoxLayout(Form)
self.verticalLayout.setObjectName("verticalLayout")
self.toolBox = QtWidgets.QToolBox(Form)
self.toolBox.setObjectName("toolBox")
self.page_summary = QtWidgets.QWidget()
self.page_summary.setGeometry(QtCore.QRect(0, 0, 857, 597))
self.page_summary.setObjectName("page_summary")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.page_summary)
self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.horizontalLayout_summary = QtWidgets.QHBoxLayout()
self.horizontalLayout_summary.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint)
self.horizontalLayout_summary.setObjectName("horizontalLayout_summary")
self.verticalLayout_summary_left = QtWidgets.QVBoxLayout()
self.verticalLayout_summary_left.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
self.verticalLayout_summary_left.setObjectName("verticalLayout_summary_left")
self.groupBox = QtWidgets.QGroupBox(self.page_summary)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(1)
sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth())
self.groupBox.setSizePolicy(sizePolicy)
self.groupBox.setObjectName("groupBox")
self.formLayout_2 = QtWidgets.QFormLayout(self.groupBox)
self.formLayout_2.setObjectName("formLayout_2")
self.lineEdit_4 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_4.setObjectName("lineEdit_4")
self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdit_4)
self.label_6 = QtWidgets.QLabel(self.groupBox)
self.label_6.setObjectName("label_6")
self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_6)
self.groupBox_5 = QtWidgets.QGroupBox(self.groupBox)
self.groupBox_5.setObjectName("groupBox_5")
self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_5)
self.gridLayout_2.setObjectName("gridLayout_2")
self.checkBox_13 = QtWidgets.QCheckBox(self.groupBox_5)
self.checkBox_13.setObjectName("checkBox_13")
self.gridLayout_2.addWidget(self.checkBox_13, 0, 0, 1, 1)
self.checkBox = QtWidgets.QCheckBox(self.groupBox_5)
self.checkBox.setObjectName("checkBox")
self.gridLayout_2.addWidget(self.checkBox, 3, 0, 1, 1)
self.checkBox_2 = QtWidgets.QCheckBox(self.groupBox_5)
self.checkBox_2.setObjectName("checkBox_2")
self.gridLayout_2.addWidget(self.checkBox_2, 3, 1, 1, 1)
self.checkBox_8 = QtWidgets.QCheckBox(self.groupBox_5)
self.checkBox_8.setObjectName("checkBox_8")
self.gridLayout_2.addWidget(self.checkBox_8, 3, 3, 1, 1)
self.checkBox_7 = QtWidgets.QCheckBox(self.groupBox_5)
self.checkBox_7.setObjectName("checkBox_7")
self.gridLayout_2.addWidget(self.checkBox_7, 3, 2, 1, 1)
self.checkBox_9 = QtWidgets.QCheckBox(self.groupBox_5)
self.checkBox_9.setObjectName("checkBox_9")
self.gridLayout_2.addWidget(self.checkBox_9, 4, 0, 1, 1)
self.checkBox_4 = QtWidgets.QCheckBox(self.groupBox_5)
self.checkBox_4.setObjectName("checkBox_4")
self.gridLayout_2.addWidget(self.checkBox_4, 1, 0, 1, 1)
self.checkBox_3 = QtWidgets.QCheckBox(self.groupBox_5)
self.checkBox_3.setObjectName("checkBox_3")
self.gridLayout_2.addWidget(self.checkBox_3, 1, 1, 1, 1)
self.checkBox_5 = QtWidgets.QCheckBox(self.groupBox_5)
self.checkBox_5.setObjectName("checkBox_5")
self.gridLayout_2.addWidget(self.checkBox_5, 1, 2, 1, 1)
self.checkBox_6 = QtWidgets.QCheckBox(self.groupBox_5)
self.checkBox_6.setObjectName("checkBox_6")
self.gridLayout_2.addWidget(self.checkBox_6, 1, 3, 1, 1)
self.checkBox_10 = QtWidgets.QCheckBox(self.groupBox_5)
self.checkBox_10.setObjectName("checkBox_10")
self.gridLayout_2.addWidget(self.checkBox_10, 4, 1, 1, 1)
self.checkBox_11 = QtWidgets.QCheckBox(self.groupBox_5)
self.checkBox_11.setObjectName("checkBox_11")
self.gridLayout_2.addWidget(self.checkBox_11, 4, 2, 1, 1)
self.checkBox_12 = QtWidgets.QCheckBox(self.groupBox_5)
self.checkBox_12.setObjectName("checkBox_12")
self.gridLayout_2.addWidget(self.checkBox_12, 4, 3, 1, 1)
self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.SpanningRole, self.groupBox_5)
self.label_15 = QtWidgets.QLabel(self.groupBox)
self.label_15.setObjectName("label_15")
self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_15)
self.label_16 = QtWidgets.QLabel(self.groupBox)
self.label_16.setObjectName("label_16")
self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_16)
self.label_18 = QtWidgets.QLabel(self.groupBox)
self.label_18.setObjectName("label_18")
self.formLayout_2.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_18)
self.label_19 = QtWidgets.QLabel(self.groupBox)
self.label_19.setObjectName("label_19")
self.formLayout_2.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_19)
self.label_20 = QtWidgets.QLabel(self.groupBox)
self.label_20.setObjectName("label_20")
self.formLayout_2.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_20)
self.verticalLayout_summary_left.addWidget(self.groupBox)
self.groupBox_3 = QtWidgets.QGroupBox(self.page_summary)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(1)
sizePolicy.setHeightForWidth(self.groupBox_3.sizePolicy().hasHeightForWidth())
self.groupBox_3.setSizePolicy(sizePolicy)
self.groupBox_3.setObjectName("groupBox_3")
self.formLayout_4 = QtWidgets.QFormLayout(self.groupBox_3)
self.formLayout_4.setObjectName("formLayout_4")
self.comboBox_2 = QtWidgets.QComboBox(self.groupBox_3)
self.comboBox_2.setObjectName("comboBox_2")
self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.comboBox_2)
self.label_11 = QtWidgets.QLabel(self.groupBox_3)
self.label_11.setObjectName("label_11")
self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_11)
self.label_12 = QtWidgets.QLabel(self.groupBox_3)
self.label_12.setObjectName("label_12")
self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_12)
self.label_13 = QtWidgets.QLabel(self.groupBox_3)
self.label_13.setObjectName("label_13")
self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_13)
self.comboBox_3 = QtWidgets.QComboBox(self.groupBox_3)
self.comboBox_3.setObjectName("comboBox_3")
self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.comboBox_3)
self.comboBox_4 = QtWidgets.QComboBox(self.groupBox_3)
self.comboBox_4.setObjectName("comboBox_4")
self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.comboBox_4)
self.label_14 = QtWidgets.QLabel(self.groupBox_3)
self.label_14.setObjectName("label_14")
self.formLayout_4.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_14)
self.lineEdit_8 = QtWidgets.QLineEdit(self.groupBox_3)
self.lineEdit_8.setObjectName("lineEdit_8")
self.formLayout_4.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.lineEdit_8)
self.label_17 = QtWidgets.QLabel(self.groupBox_3)
self.label_17.setObjectName("label_17")
self.formLayout_4.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_17)
self.comboBox_5 = QtWidgets.QComboBox(self.groupBox_3)
self.comboBox_5.setObjectName("comboBox_5")
self.formLayout_4.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.comboBox_5)
self.verticalLayout_summary_left.addWidget(self.groupBox_3)
self.horizontalLayout_summary.addLayout(self.verticalLayout_summary_left)
self.verticalLayout_summary_right = QtWidgets.QVBoxLayout()
self.verticalLayout_summary_right.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
self.verticalLayout_summary_right.setObjectName("verticalLayout_summary_right")
self.groupBox_4 = QtWidgets.QGroupBox(self.page_summary)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(1)
sizePolicy.setHeightForWidth(self.groupBox_4.sizePolicy().hasHeightForWidth())
self.groupBox_4.setSizePolicy(sizePolicy)
self.groupBox_4.setObjectName("groupBox_4")
self.formLayout_3 = QtWidgets.QFormLayout(self.groupBox_4)
self.formLayout_3.setObjectName("formLayout_3")
self.lineEdit_6 = QtWidgets.QLineEdit(self.groupBox_4)
self.lineEdit_6.setObjectName("lineEdit_6")
self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdit_6)
self.label_7 = QtWidgets.QLabel(self.groupBox_4)
self.label_7.setObjectName("label_7")
self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_7)
self.lineEdit_7 = QtWidgets.QLineEdit(self.groupBox_4)
self.lineEdit_7.setObjectName("lineEdit_7")
self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEdit_7)
self.label_8 = QtWidgets.QLabel(self.groupBox_4)
self.label_8.setObjectName("label_8")
self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_8)
self.lineEdit_5 = QtWidgets.QLineEdit(self.groupBox_4)
self.lineEdit_5.setObjectName("lineEdit_5")
self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.lineEdit_5)
self.label_9 = QtWidgets.QLabel(self.groupBox_4)
self.label_9.setObjectName("label_9")
self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_9)
self.label_10 = QtWidgets.QLabel(self.groupBox_4)
self.label_10.setObjectName("label_10")
self.formLayout_3.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_10)
self.listView = QtWidgets.QListView(self.groupBox_4)
self.listView.setObjectName("listView")
self.formLayout_3.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.listView)
self.label_24 = QtWidgets.QLabel(self.groupBox_4)
self.label_24.setObjectName("label_24")
self.formLayout_3.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_24)
self.label_25 = QtWidgets.QLabel(self.groupBox_4)
self.label_25.setObjectName("label_25")
self.formLayout_3.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_25)
self.comboBox_6 = QtWidgets.QComboBox(self.groupBox_4)
self.comboBox_6.setObjectName("comboBox_6")
self.formLayout_3.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.comboBox_6)
self.checkBox_14 = QtWidgets.QCheckBox(self.groupBox_4)
self.checkBox_14.setObjectName("checkBox_14")
self.formLayout_3.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.checkBox_14)
self.verticalLayout_summary_right.addWidget(self.groupBox_4)
self.groupBox_2 = QtWidgets.QGroupBox(self.page_summary)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(1)
sizePolicy.setHeightForWidth(self.groupBox_2.sizePolicy().hasHeightForWidth())
self.groupBox_2.setSizePolicy(sizePolicy)
self.groupBox_2.setObjectName("groupBox_2")
self.formLayout = QtWidgets.QFormLayout(self.groupBox_2)
self.formLayout.setObjectName("formLayout")
self.label = QtWidgets.QLabel(self.groupBox_2)
self.label.setObjectName("label")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label)
self.lineEdit = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit.setObjectName("lineEdit")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.lineEdit)
self.label_2 = QtWidgets.QLabel(self.groupBox_2)
self.label_2.setObjectName("label_2")
self.formLayout.setWidget(8, QtWidgets.QFormLayout.LabelRole, self.label_2)
self.comboBox = QtWidgets.QComboBox(self.groupBox_2)
self.comboBox.setObjectName("comboBox")
self.formLayout.setWidget(8, QtWidgets.QFormLayout.FieldRole, self.comboBox)
self.widget = QtWidgets.QWidget(self.groupBox_2)
self.widget.setObjectName("widget")
self.gridLayout = QtWidgets.QGridLayout(self.widget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
self.radioButton = QtWidgets.QRadioButton(self.widget)
self.radioButton.setObjectName("radioButton")
self.gridLayout.addWidget(self.radioButton, 0, 0, 1, 1)
self.radioButton_2 = QtWidgets.QRadioButton(self.widget)
self.radioButton_2.setObjectName("radioButton_2")
self.gridLayout.addWidget(self.radioButton_2, 0, 1, 1, 1)
self.label_3 = QtWidgets.QLabel(self.widget)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1)
self.spinBox = QtWidgets.QSpinBox(self.widget)
self.spinBox.setObjectName("spinBox")
self.gridLayout.addWidget(self.spinBox, 1, 1, 1, 1)
self.label_22 = QtWidgets.QLabel(self.widget)
self.label_22.setObjectName("label_22")
self.gridLayout.addWidget(self.label_22, 6, 0, 1, 1)
self.label_21 = QtWidgets.QLabel(self.widget)
self.label_21.setObjectName("label_21")
self.gridLayout.addWidget(self.label_21, 2, 0, 1, 1)
self.spinBox_2 = QtWidgets.QSpinBox(self.widget)
self.spinBox_2.setObjectName("spinBox_2")
self.gridLayout.addWidget(self.spinBox_2, 2, 1, 1, 1)
self.spinBox_3 = QtWidgets.QSpinBox(self.widget)
self.spinBox_3.setObjectName("spinBox_3")
self.gridLayout.addWidget(self.spinBox_3, 6, 1, 1, 1)
self.formLayout.setWidget(9, QtWidgets.QFormLayout.FieldRole, self.widget)
self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_2.setObjectName("lineEdit_2")
self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.lineEdit_2)
self.label_4 = QtWidgets.QLabel(self.groupBox_2)
self.label_4.setObjectName("label_4")
self.formLayout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_4)
self.lineEdit_3 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_3.setObjectName("lineEdit_3")
self.formLayout.setWidget(10, QtWidgets.QFormLayout.FieldRole, self.lineEdit_3)
self.label_5 = QtWidgets.QLabel(self.groupBox_2)
self.label_5.setObjectName("label_5")
self.formLayout.setWidget(10, QtWidgets.QFormLayout.LabelRole, self.label_5)
self.label_23 = QtWidgets.QLabel(self.groupBox_2)
self.label_23.setObjectName("label_23")
self.formLayout.setWidget(11, QtWidgets.QFormLayout.LabelRole, self.label_23)
self.lineEdit_9 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_9.setObjectName("lineEdit_9")
self.formLayout.setWidget(11, QtWidgets.QFormLayout.FieldRole, self.lineEdit_9)
self.verticalLayout_summary_right.addWidget(self.groupBox_2)
self.horizontalLayout_summary.addLayout(self.verticalLayout_summary_right)
self.verticalLayout_4.addLayout(self.horizontalLayout_summary)
self.toolBox.addItem(self.page_summary, "")
self.page_source = QtWidgets.QWidget()
self.page_source.setGeometry(QtCore.QRect(0, 0, 874, 496))
self.page_source.setObjectName("page_source")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.page_source)
self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.verticalLayout_source = QtWidgets.QVBoxLayout()
self.verticalLayout_source.setObjectName("verticalLayout_source")
self.sourceTextEdit = QtWidgets.QTextEdit(self.page_source)
self.sourceTextEdit.setObjectName("sourceTextEdit")
self.verticalLayout_source.addWidget(self.sourceTextEdit)
self.btnCopySource = QtWidgets.QPushButton(self.page_source)
self.btnCopySource.setObjectName("btnCopySource")
self.verticalLayout_source.addWidget(self.btnCopySource)
self.verticalLayout_3.addLayout(self.verticalLayout_source)
self.toolBox.addItem(self.page_source, "")
self.page_sourcetree = QtWidgets.QWidget()
self.page_sourcetree.setObjectName("page_sourcetree")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.page_sourcetree)
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.treeViewEdit = QtWidgets.QTreeView(self.page_sourcetree)
self.treeViewEdit.setIconSize(QtCore.QSize(16, 16))
self.treeViewEdit.setObjectName("treeViewEdit")
self.verticalLayout_2.addWidget(self.treeViewEdit)
self.toolBox.addItem(self.page_sourcetree, "")
self.verticalLayout.addWidget(self.toolBox)
self.retranslateUi(Form)
self.toolBox.setCurrentIndex(2)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.groupBox.setTitle(_translate("Form", "Government"))
self.label_6.setText(_translate("Form", "Empire Name"))
self.groupBox_5.setTitle(_translate("Form", "Type"))
self.checkBox_13.setText(_translate("Form", "hive mind (3)"))
self.checkBox.setText(_translate("Form", "spiritualist (2)"))
self.checkBox_2.setText(_translate("Form", "spiritualist (1)"))
self.checkBox_8.setText(_translate("Form", "materialist (2)"))
self.checkBox_7.setText(_translate("Form", "materialist (1)"))
self.checkBox_9.setText(_translate("Form", "authoritarian (2)"))
self.checkBox_4.setText(_translate("Form", "militarist (2)"))
self.checkBox_3.setText(_translate("Form", "militarist (1)"))
self.checkBox_5.setText(_translate("Form", "pacifist (1)"))
self.checkBox_6.setText(_translate("Form", "pacifist (2)"))
self.checkBox_10.setText(_translate("Form", "authoritarian (1)"))
self.checkBox_11.setText(_translate("Form", "egalitarian (1)"))
self.checkBox_12.setText(_translate("Form", "egalitarian (2)"))
self.label_15.setText(_translate("Form", "Civics"))
self.label_16.setText(_translate("Form", "Homeworld"))
self.label_18.setText(_translate("Form", "Homeworld class"))
self.label_19.setText(_translate("Form", "System"))
self.label_20.setText(_translate("Form", "Initializer"))
self.groupBox_3.setTitle(_translate("Form", "Visuals"))
self.label_11.setText(_translate("Form", "Ships"))
self.label_12.setText(_translate("Form", "Weapons"))
self.label_13.setText(_translate("Form", "FTL"))
self.label_14.setText(_translate("Form", "Flag"))
self.label_17.setText(_translate("Form", "Cities"))
self.groupBox_4.setTitle(_translate("Form", "Species"))
self.label_7.setText(_translate("Form", "Name"))
self.label_8.setText(_translate("Form", "Plural"))
self.label_9.setText(_translate("Form", "Adjective"))
self.label_10.setText(_translate("Form", "Traits"))
self.label_24.setText(_translate("Form", "Fallen Empire"))
self.label_25.setText(_translate("Form", "Spawn"))
self.checkBox_14.setText(_translate("Form", "Spawn as fallen Empire"))
self.groupBox_2.setTitle(_translate("Form", "Leader"))
self.label.setText(_translate("Form", "Name"))
self.label_2.setText(_translate("Form", "Portrait"))
self.radioButton.setText(_translate("Form", "Male"))
self.radioButton_2.setText(_translate("Form", "Female"))
self.label_3.setText(_translate("Form", "Texture"))
self.label_22.setText(_translate("Form", "Clothes"))
self.label_21.setText(_translate("Form", "Hair"))
self.label_4.setText(_translate("Form", "Title"))
self.label_5.setText(_translate("Form", "Heir"))
self.label_23.setText(_translate("Form", "Room"))
self.toolBox.setItemText(self.toolBox.indexOf(self.page_summary), _translate("Form", "Summary"))
self.btnCopySource.setText(_translate("Form", "Copy to Clipboard"))
self.toolBox.setItemText(self.toolBox.indexOf(self.page_source), _translate("Form", "Source"))
self.toolBox.setItemText(self.toolBox.indexOf(self.page_sourcetree), _translate("Form", "TreeEdit"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())

View File

@ -0,0 +1,529 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>892</width>
<height>595</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QToolBox" name="toolBox">
<property name="currentIndex">
<number>2</number>
</property>
<widget class="QWidget" name="page_summary">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>857</width>
<height>597</height>
</rect>
</property>
<attribute name="label">
<string>Summary</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_summary">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_summary_left">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Government</string>
</property>
<layout class="QFormLayout" name="formLayout_2">
<item row="0" column="1">
<widget class="QLineEdit" name="lineEdit_4"/>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Empire Name</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox_5">
<property name="title">
<string>Type</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QCheckBox" name="checkBox_13">
<property name="text">
<string>hive mind (3)</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>spiritualist (2)</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="checkBox_2">
<property name="text">
<string>spiritualist (1)</string>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QCheckBox" name="checkBox_8">
<property name="text">
<string>materialist (2)</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QCheckBox" name="checkBox_7">
<property name="text">
<string>materialist (1)</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="checkBox_9">
<property name="text">
<string>authoritarian (2)</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="checkBox_4">
<property name="text">
<string>militarist (2)</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="checkBox_3">
<property name="text">
<string>militarist (1)</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QCheckBox" name="checkBox_5">
<property name="text">
<string>pacifist (1)</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QCheckBox" name="checkBox_6">
<property name="text">
<string>pacifist (2)</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QCheckBox" name="checkBox_10">
<property name="text">
<string>authoritarian (1)</string>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QCheckBox" name="checkBox_11">
<property name="text">
<string>egalitarian (1)</string>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QCheckBox" name="checkBox_12">
<property name="text">
<string>egalitarian (2)</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Civics</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Homeworld</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_18">
<property name="text">
<string>Homeworld class</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_19">
<property name="text">
<string>System</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_20">
<property name="text">
<string>Initializer</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Visuals</string>
</property>
<layout class="QFormLayout" name="formLayout_4">
<item row="0" column="1">
<widget class="QComboBox" name="comboBox_2"/>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Ships</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Weapons</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>FTL</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="comboBox_3"/>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboBox_4"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Flag</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="lineEdit_8"/>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_17">
<property name="text">
<string>Cities</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="comboBox_5"/>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_summary_right">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<item>
<widget class="QGroupBox" name="groupBox_4">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Species</string>
</property>
<layout class="QFormLayout" name="formLayout_3">
<item row="0" column="1">
<widget class="QLineEdit" name="lineEdit_6"/>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Name</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="lineEdit_7"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Plural</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="lineEdit_5"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Adjective</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Traits</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QListView" name="listView"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_24">
<property name="text">
<string>Fallen Empire</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_25">
<property name="text">
<string>Spawn</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QComboBox" name="comboBox_6"/>
</item>
<item row="5" column="1">
<widget class="QCheckBox" name="checkBox_14">
<property name="text">
<string>Spawn as fallen Empire</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Leader</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="2" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Name</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="lineEdit"/>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Portrait</string>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QComboBox" name="comboBox"/>
</item>
<item row="9" column="1">
<widget class="QWidget" name="widget" native="true">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QRadioButton" name="radioButton">
<property name="text">
<string>Male</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QRadioButton" name="radioButton_2">
<property name="text">
<string>Female</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Texture</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="spinBox"/>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_22">
<property name="text">
<string>Clothes</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_21">
<property name="text">
<string>Hair</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="spinBox_2"/>
</item>
<item row="6" column="1">
<widget class="QSpinBox" name="spinBox_3"/>
</item>
</layout>
</widget>
</item>
<item row="5" column="1">
<widget class="QLineEdit" name="lineEdit_2"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Title</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QLineEdit" name="lineEdit_3"/>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Heir</string>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_23">
<property name="text">
<string>Room</string>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QLineEdit" name="lineEdit_9"/>
</item>
</layout>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_source">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>874</width>
<height>496</height>
</rect>
</property>
<attribute name="label">
<string>Source</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QVBoxLayout" name="verticalLayout_source">
<item>
<widget class="QTextEdit" name="sourceTextEdit"/>
</item>
<item>
<widget class="QPushButton" name="btnCopySource">
<property name="text">
<string>Copy to Clipboard</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_sourcetree">
<attribute name="label">
<string>TreeEdit</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QTreeView" name="treeViewEdit">
<property name="iconSize">
<size>
<width>16</width>
<height>16</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,54 @@
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QLabel
from PyQt5.QtGui import QPainter, QColor, QPen
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt
import random
class App(QMainWindow):
def __init__(self):
super().__init__()
self.title = 'Catch Pyxel'
self.left = 100
self.top = 100
self.width = 800
self.height = 600
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
# Set window background color
self.setAutoFillBackground(True)
p = self.palette()
p.setColor(self.backgroundRole(), Qt.white)
self.setPalette(p)
# Add paint widget and paint
self.m = PaintWidget(self)
self.m.move(0,0)
self.m.resize(self.width,self.height)
self.show()
class PaintWidget(QWidget):
def paintEvent(self, event):
qp = QPainter(self)
qp.drawImage()
#qp.setPen(Qt.black)
#size = self.size()
#
# for i in range(1024):
# x = random.randint(1, size.width()-1)
# y = random.randint(1, size.height()-1)
# qp.drawPoint(x, y)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())

View File

@ -0,0 +1,105 @@
from OpenGL import GL
from PyQt5 import QtWidgets, QtCore, QtGui, QtOpenGL
from OpenGL.GL.ARB.texture_rg import GL_R32F
import numpy as np
import ctypes
import time
w, h = 400, 400
class TestWidget(QtOpenGL.QGLWidget):
def __init__(self):
QtOpenGL.QGLWidget.__init__(self)
self.resize(w, h)
self.t = time.time()
self._update_timer = QtCore.QTimer()
self._update_timer.timeout.connect(self.update)
self._update_timer.start(1e3 / 60.)
def initializeGL(self):
# create an image
Y, X = np.ogrid[-2.5:2.5:h*1j, -2.5:2.5:w*1j]
image = np.empty((h, w), dtype=np.float32)
image[:] = np.exp(- X**2 - Y**2)# * (1. + .5*(np.random.rand(h, w)-.5))
image[-30:] = np.linspace(0, 1, w)
# create pixel buffer object for transferring textures
self._buffer_id = GL.glGenBuffers(1)
GL.glBindBuffer(GL.GL_PIXEL_UNPACK_BUFFER, self._buffer_id)
GL.glBufferData(GL.GL_PIXEL_UNPACK_BUFFER, w*h*4, None, GL.GL_STREAM_DRAW)
GL.glBindBuffer(GL.GL_PIXEL_UNPACK_BUFFER, 0)
# map and modify pixel buffer
GL.glBindBuffer(GL.GL_PIXEL_UNPACK_BUFFER, self._buffer_id)
pbo_addr = GL.glMapBuffer(GL.GL_PIXEL_UNPACK_BUFFER, GL.GL_WRITE_ONLY)
# write to PBO using ctypes memmove
ctypes.memmove(pbo_addr, image.ctypes.data, (w*h * image.itemsize))
# write to PBO using numpy interface
pbo_ptr = ctypes.cast(pbo_addr, ctypes.POINTER(ctypes.c_float))
pbo_np = np.ctypeslib.as_array(pbo_ptr, shape=(h, w))
pbo_np[:] = image
GL.glUnmapBuffer(GL.GL_PIXEL_UNPACK_BUFFER)
GL.glBindBuffer(GL.GL_PIXEL_UNPACK_BUFFER, 0)
# create texture from pixel buffer object
self._texture_id = GL.glGenTextures(1)
GL.glBindBuffer(GL.GL_PIXEL_UNPACK_BUFFER, self._buffer_id)
GL.glBindTexture(GL.GL_TEXTURE_2D, self._texture_id)
GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR)
GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR)
GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL_R32F, w, h, 0, GL.GL_RED, GL.GL_FLOAT, None)
GL.glBindBuffer(GL.GL_PIXEL_UNPACK_BUFFER, 0)
# create a shader for coloring the texture
shader_program = QtGui.QOpenGLShaderProgram()
vertex_src = """
void main() {
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = gl_Vertex;
}
"""
fragment_src = """
uniform highp sampler2D tex;
uniform float amp;
uniform float r;
float rand(vec2 co){
return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453 * (1.+r));
}
void main() {
float val = texture2D(tex, gl_TexCoord[0]).r;
val *= .7 + .3*rand(gl_TexCoord[0].xx) + .8*rand(gl_TexCoord[0].xy);
vec4 color1 = vec4(0., 0., 0., 1.);
vec4 color2 = vec4(3., .5, .2, 1.);
gl_FragColor = mix(color1, color2, 3.5 * val * amp);
}
"""
shader_program.addShaderFromSourceCode(QtGui.QOpenGLShader.Vertex, vertex_src)
shader_program.addShaderFromSourceCode(QtGui.QOpenGLShader.Fragment, fragment_src)
shader_program.link()
self._shader_program = shader_program
self._amp_location = shader_program.uniformLocation("amp")
self._r_location = shader_program.uniformLocation("r")
def paintGL(self):
t = time.time()
amp = .6 + .6*np.cos(t*np.pi)**10
r = np.random.rand(1)[0]
target = QtCore.QRectF(-1, -1, 2, 2)
self._shader_program.bind()
self._shader_program.setUniformValue(self._amp_location, amp)
self._shader_program.setUniformValue(self._r_location, r)
self.drawTexture(target, self._texture_id)
def resizeGL(self, w, h):
GL.glViewport(0, 0, w, h)
app = QtWidgets.QApplication([])
win = TestWidget()
win.show()
app.exec_()