1
0
Fork 0
mirror of synced 2024-06-29 03:31:06 +12:00

Some improvements

This commit is contained in:
Dummerle 2021-06-10 19:58:35 +02:00
parent 337b738599
commit 676c253a13
8 changed files with 114 additions and 144 deletions

View file

@ -1,5 +1,3 @@
import webbrowser
from PyQt5.QtCore import QSize, pyqtSignal from PyQt5.QtCore import QSize, pyqtSignal
from PyQt5.QtWidgets import QMenu, QTabWidget, QWidget, QWidgetAction from PyQt5.QtWidgets import QMenu, QTabWidget, QWidget, QWidgetAction
from qtawesome import icon from qtawesome import icon
@ -26,32 +24,23 @@ class TabWidget(QTabWidget):
disabled_tab = 4 if not offline else 1 disabled_tab = 4 if not offline else 1
self.core = core self.core = core
self.setTabBar(TabBar(disabled_tab)) self.setTabBar(TabBar(disabled_tab))
# Generate Tabs # Generate Tabs
self.games_tab = GameTab(core, self, offline) self.games_tab = GameTab(core, self, offline)
self.addTab(self.games_tab, self.tr("Games")) self.addTab(self.games_tab, self.tr("Games"))
if not offline: if not offline:
updates = self.games_tab.default_widget.game_list.updates updates = self.games_tab.default_widget.game_list.updates
self.downloadTab = DownloadTab(core, updates, self) self.downloadTab = DownloadTab(core, updates, self)
self.addTab(self.downloadTab, "Downloads" + (" (" + str(len(updates)) + ")" if len(updates) != 0 else "")) self.addTab(self.downloadTab, "Downloads" + (" (" + str(len(updates)) + ")" if len(updates) != 0 else ""))
self.cloud_saves = SyncSaves(core, self) self.cloud_saves = SyncSaves(core, self)
self.addTab(self.cloud_saves, "Cloud Saves") self.addTab(self.cloud_saves, "Cloud Saves")
self.store = Shop() self.store = Shop()
self.addTab(self.store, self.tr("Store")) self.addTab(self.store, self.tr("Store (Beta)"))
self.settings = SettingsTab(core, self) self.settings = SettingsTab(core, self)
# Space Tab # Space Tab
self.addTab(QWidget(), "") self.addTab(QWidget(), "")
self.setTabEnabled(disabled_tab, False) self.setTabEnabled(disabled_tab, False)
# Buttons # Button
store_button = TabButtonWidget(core, 'fa.shopping-cart', 'Epic Games Store')
store_button.pressed.connect(lambda: webbrowser.open("https://www.epicgames.com/store"))
self.tabBar().setTabButton(disabled_tab, self.tabBar().RightSide, store_button)
self.account = QWidget() self.account = QWidget()
self.addTab(self.account, "") self.addTab(self.account, "")
self.setTabEnabled(disabled_tab + 1, False) self.setTabEnabled(disabled_tab + 1, False)
@ -151,8 +140,7 @@ class TabWidget(QTabWidget):
self.setTabText(1, "Downloads" + ((" (" + str(downloads) + ")") if downloads != 0 else "")) self.setTabText(1, "Downloads" + ((" (" + str(downloads) + ")") if downloads != 0 else ""))
self.downloadTab.update_text.setVisible(len(self.downloadTab.update_widgets) == 0) self.downloadTab.update_text.setVisible(len(self.downloadTab.update_widgets) == 0)
# Update gamelist and set text of Downlaods to "Downloads" # Update gamelist and set text of Downloads to "Downloads"
def dl_finished(self, update_list): def dl_finished(self, update_list):
if update_list[0]: if update_list[0]:
self.games_tab.default_widget.game_list.update_list(update_list[1]) self.games_tab.default_widget.game_list.update_list(update_list[1])

View file

@ -22,6 +22,7 @@ class Shop(QStackedWidget):
self.addWidget(self.info) self.addWidget(self.info)
self.info.back_button.clicked.connect(lambda: self.setCurrentIndex(0)) self.info.back_button.clicked.connect(lambda: self.setCurrentIndex(0))
self.search_results.back_button.clicked.connect(lambda: self.setCurrentIndex(0))
self.shop.show_info.connect(self.show_info) self.shop.show_info.connect(self.show_info)
self.shop.show_game.connect(self.show_game_info) self.shop.show_game.connect(self.show_game_info)
@ -37,4 +38,3 @@ class Shop(QStackedWidget):
def show_info(self, data): def show_info(self, data):
self.search_results.show_results(data) self.search_results.show_results(data)
self.setCurrentIndex(1) self.setCurrentIndex(1)

View file

@ -13,7 +13,7 @@ class SearchResults(QWidget):
def __init__(self): def __init__(self):
super(SearchResults, self).__init__() super(SearchResults, self).__init__()
self.main_layout = QVBoxLayout() self.main_layout = QVBoxLayout()
self.back_button = QPushButton() self.back_button = QPushButton(self.tr("Back"))
self.main_layout.addWidget(self.back_button) self.main_layout.addWidget(self.back_button)
self.main_layout.addWidget(self.back_button) self.main_layout.addWidget(self.back_button)
self.result_area = QScrollArea() self.result_area = QScrollArea()

View file

@ -36,7 +36,7 @@ class ShopGame:
else: else:
self.links = [] self.links = []
self.languages = langs self.languages = langs
self.reqs = reqs # {"Betriebssystem":win7, processor:i9 9900k, ram...}; Note: name from language self.reqs = reqs
self.publisher = publisher self.publisher = publisher
self.developer = developer self.developer = developer
self.price = original_price self.price = original_price
@ -44,7 +44,6 @@ class ShopGame:
@classmethod @classmethod
def from_json(cls, api_data: dict, search_data: dict): def from_json(cls, api_data: dict, search_data: dict):
print(api_data)
if isinstance(api_data, list): if isinstance(api_data, list):
for product in api_data: for product in api_data:
if product["_title"] == "home": if product["_title"] == "home":
@ -66,8 +65,10 @@ class ShopGame:
for i, system in enumerate(api_data["data"]["requirements"]["systems"]): for i, system in enumerate(api_data["data"]["requirements"]["systems"]):
tmp.reqs[system["systemType"]] = {} tmp.reqs[system["systemType"]] = {}
for req in system["details"]: for req in system["details"]:
tmp.reqs[system["systemType"]][req["title"]] = (req["minimum"], req["recommended"]) try:
tmp.reqs[system["systemType"]][req["title"]] = (req["minimum"], req["recommended"])
except KeyError:
pass
tmp.publisher = api_data["data"]["meta"].get("publisher", "undefined") tmp.publisher = api_data["data"]["meta"].get("publisher", "undefined")
tmp.developer = api_data["data"]["meta"].get("developer", "undefined") tmp.developer = api_data["data"]["meta"].get("developer", "undefined")
tmp.price = search_data['price']['totalPrice']['fmtPrice']['originalPrice'] tmp.price = search_data['price']['totalPrice']['fmtPrice']['originalPrice']

View file

@ -6,17 +6,18 @@ from json import JSONDecodeError
import requests import requests
from PyQt5 import QtGui from PyQt5 import QtGui
from PyQt5.QtCore import Qt, pyqtSignal, QUrl, QByteArray, QJsonDocument, QJsonParseError, \ from PyQt5.QtCore import Qt, pyqtSignal, QUrl, QJsonDocument, QJsonParseError, \
QStringListModel QStringListModel
from PyQt5.QtGui import QPixmap from PyQt5.QtGui import QPixmap
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QHBoxLayout, QCompleter from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QCompleter, QGroupBox, QHBoxLayout
from rare.ui.components.tabs.store.store import Ui_ShopWidget from rare.ui.components.tabs.store.store import Ui_ShopWidget
from rare.utils.extra_widgets import WaitingSpinner, ImageLabel from rare.utils.extra_widgets import WaitingSpinner, ImageLabel, FlowLayout
from rare.utils.utils import get_lang from rare.utils.utils import get_lang
# noinspection PyAttributeOutsideInit,PyBroadException
class ShopWidget(QWidget, Ui_ShopWidget): class ShopWidget(QWidget, Ui_ShopWidget):
show_info = pyqtSignal(list) show_info = pyqtSignal(list)
show_game = pyqtSignal(dict) show_game = pyqtSignal(dict)
@ -25,10 +26,17 @@ class ShopWidget(QWidget, Ui_ShopWidget):
def __init__(self): def __init__(self):
super(ShopWidget, self).__init__() super(ShopWidget, self).__init__()
self.setupUi(self) self.setupUi(self)
self.search_results.setVisible(False)
self.manager = QNetworkAccessManager() self.manager = QNetworkAccessManager()
self.free_games_widget = QWidget()
self.free_games_widget.setLayout(FlowLayout())
self.free_games_now = QGroupBox(self.tr("Free Games"))
self.free_games_now.setLayout(QHBoxLayout())
self.free_games_widget.layout().addWidget(self.free_games_now)
self.coming_free_games = QGroupBox(self.tr("Free Games next week"))
self.coming_free_games.setLayout(QHBoxLayout())
self.free_games_widget.layout().addWidget(self.coming_free_games)
self.free_games_stack.addWidget(WaitingSpinner()) self.free_games_stack.addWidget(WaitingSpinner())
self.free_games_stack.setCurrentIndex(1) self.free_games_stack.addWidget(self.free_games_widget)
self.search.textChanged.connect(self.search_games) self.search.textChanged.connect(self.search_games)
self.completer = QCompleter() self.completer = QCompleter()
self.completer.setCaseSensitivity(Qt.CaseInsensitive) self.completer.setCaseSensitivity(Qt.CaseInsensitive)
@ -45,8 +53,7 @@ class ShopWidget(QWidget, Ui_ShopWidget):
os.makedirs(self.path) os.makedirs(self.path)
url = "https://store-site-backend-static.ak.epicgames.com/freeGamesPromotions" url = "https://store-site-backend-static.ak.epicgames.com/freeGamesPromotions"
self.free_game_request = self.manager.get(QNetworkRequest(QUrl(url))) self.free_game_request = self.manager.get(QNetworkRequest(QUrl(url)))
self.free_game_request.readyRead.connect(self.add_free_games) self.free_game_request.finished.connect(self.add_free_games)
self.free_game_request.finished.connect(self.free_game_request.deleteLater if self.free_game_request else None)
# free_games = api_utils.get_free_games() # free_games = api_utils.get_free_games()
@ -71,20 +78,30 @@ class ShopWidget(QWidget, Ui_ShopWidget):
continue continue
try: try:
# parse datetime # parse datetime
end_date = datetime.datetime.strptime( try:
game["promotions"].get("promotionalOffers", game["promotions"].get("upcomingPromotionalOffers"))[0][ end_date = datetime.datetime.strptime(
"promotionalOffers"][0]["endDate"], game["promotions"]["upcomingPromotionalOffers"][0]["promotionalOffers"][0]["endDate"],
'%Y-%m-%dT%H:%M:%S.%fZ') '%Y-%m-%dT%H:%M:%S.%fZ')
start_date = datetime.datetime.strptime( except Exception:
game["promotions"].get("promotionalOffers", game["promotions"].get("upcomingPromotionalOffers"))[0][ try:
"promotionalOffers"][0]["startDate"], end_date = datetime.datetime.strptime(
'%Y-%m-%dT%H:%M:%S.%fZ') game["promotions"]["promotionalOffers"][0]["promotionalOffers"][0]["endDate"],
except IndexError: '%Y-%m-%dT%H:%M:%S.%fZ')
print("index error") except Exception:
continue continue
except KeyError: try:
print("keyerror") start_date = datetime.datetime.strptime(
continue game["promotions"]["upcomingPromotionalOffers"][0]["promotionalOffers"][0]["startDate"],
'%Y-%m-%dT%H:%M:%S.%fZ')
except Exception:
try:
start_date = datetime.datetime.strptime(
game["promotions"]["promotionalOffers"][0]["promotionalOffers"][0]["startDate"],
'%Y-%m-%dT%H:%M:%S.%fZ')
except Exception as e:
print(e)
continue
except TypeError: except TypeError:
print("type error") print("type error")
continue continue
@ -95,30 +112,29 @@ class ShopWidget(QWidget, Ui_ShopWidget):
for free_game in free_games_now: for free_game in free_games_now:
w = GameWidget(free_game, self.path) w = GameWidget(free_game, self.path)
w.show_info.connect(lambda x: self.search_games(x, True)) w.show_info.connect(self.show_game.emit)
self.free_game_now.layout().addWidget(w) self.free_games_now.layout().addWidget(w)
self.free_game_widgets.append(w) self.free_game_widgets.append(w)
self.free_game_group_box_2.setMinimumHeight(200)
self.free_games_now.layout().addStretch(1)
for free_game in coming_free_games: for free_game in coming_free_games:
w = GameWidget(free_game, self.path) w = GameWidget(free_game, self.path)
if free_game["title"] != "Mystery Game": if free_game["title"] != "Mystery Game":
w.show_info.connect(self.show_info) w.show_info.connect(self.show_game.emit)
self.comming_free_game.layout().addWidget(w) self.coming_free_games.layout().addWidget(w)
self.free_game_widgets.append(w) self.free_game_widgets.append(w)
self.free_games_stack.setCurrentIndex(0) self.coming_free_games.layout().addStretch(1)
# self.coming_free_games.setFixedWidth(int(40 + len(coming_free_games) * 300))
self.free_games_stack.setCurrentIndex(1)
self.free_game_request.deleteLater()
def search_games(self, text, show_direct=False): def search_games(self, text, show_direct=False):
if text == "": if text == "":
self.search_results.setVisible(False) self.search_results.setVisible(False)
else: else:
locale = get_lang() locale = get_lang()
payload = QByteArray()
payload.append(
"query=query searchStoreQuery($allowCountries: String, $category: String, $count: Int, $country: String!, $keywords: String, $locale: String, $namespace: String, $withMapping: Boolean = false, $itemNs: String, $sortBy: String, $sortDir: String, $start: Int, $tag: String, $releaseDate: String, $withPrice: Boolean = false, $withPromotions: Boolean = false, $priceRange: String, $freeGame: Boolean, $onSale: Boolean, $effectiveDate: String) {\n Catalog {\n searchStore(\n allowCountries: $allowCountries\n category: $category\n count: $count\n country: $country\n keywords: $keywords\n locale: $locale\n namespace: $namespace\n itemNs: $itemNs\n sortBy: $sortBy\n sortDir: $sortDir\n releaseDate: $releaseDate\n start: $start\n tag: $tag\n priceRange: $priceRange\n freeGame: $freeGame\n onSale: $onSale\n effectiveDate: $effectiveDate\n ) {\n elements {\n title\n id\n namespace\n description\n effectiveDate\n keyImages {\n type\n url\n }\n currentPrice\n seller {\n id\n name\n }\n productSlug\n urlSlug\n url\n tags {\n id\n }\n items {\n id\n namespace\n }\n customAttributes {\n key\n value\n }\n categories {\n path\n }\n catalogNs @include(if: $withMapping) {\n mappings(pageType: \"productHome\") {\n pageSlug\n pageType\n }\n }\n offerMappings @include(if: $withMapping) {\n pageSlug\n pageType\n }\n price(country: $country) @include(if: $withPrice) {\n totalPrice {\n discountPrice\n originalPrice\n voucherDiscount\n discount\n currencyCode\n currencyInfo {\n decimals\n }\n fmtPrice(locale: $locale) {\n originalPrice\n discountPrice\n intermediatePrice\n }\n }\n lineOffers {\n appliedRules {\n id\n endDate\n discountSetting {\n discountType\n }\n }\n }\n }\n promotions(category: $category) @include(if: $withPromotions) {\n promotionalOffers {\n promotionalOffers {\n startDate\n endDate\n discountSetting {\n discountType\n discountPercentage\n }\n }\n }\n upcomingPromotionalOffers {\n promotionalOffers {\n startDate\n endDate\n discountSetting {\n discountType\n discountPercentage\n }\n }\n }\n }\n }\n paging {\n count\n total\n }\n }\n }\n}\n")
payload = json.dumps({ payload = json.dumps({
"query": "query searchStoreQuery($allowCountries: String, $category: String, $count: Int, $country: String!, $keywords: String, $locale: String, $namespace: String, $withMapping: Boolean = false, $itemNs: String, $sortBy: String, $sortDir: String, $start: Int, $tag: String, $releaseDate: String, $withPrice: Boolean = false, $withPromotions: Boolean = false, $priceRange: String, $freeGame: Boolean, $onSale: Boolean, $effectiveDate: String) {\n Catalog {\n searchStore(\n allowCountries: $allowCountries\n category: $category\n count: $count\n country: $country\n keywords: $keywords\n locale: $locale\n namespace: $namespace\n itemNs: $itemNs\n sortBy: $sortBy\n sortDir: $sortDir\n releaseDate: $releaseDate\n start: $start\n tag: $tag\n priceRange: $priceRange\n freeGame: $freeGame\n onSale: $onSale\n effectiveDate: $effectiveDate\n ) {\n elements {\n title\n id\n namespace\n description\n effectiveDate\n keyImages {\n type\n url\n }\n currentPrice\n seller {\n id\n name\n }\n productSlug\n urlSlug\n url\n tags {\n id\n }\n items {\n id\n namespace\n }\n customAttributes {\n key\n value\n }\n categories {\n path\n }\n catalogNs @include(if: $withMapping) {\n mappings(pageType: \"productHome\") {\n pageSlug\n pageType\n }\n }\n offerMappings @include(if: $withMapping) {\n pageSlug\n pageType\n }\n price(country: $country) @include(if: $withPrice) {\n totalPrice {\n discountPrice\n originalPrice\n voucherDiscount\n discount\n currencyCode\n currencyInfo {\n decimals\n }\n fmtPrice(locale: $locale) {\n originalPrice\n discountPrice\n intermediatePrice\n }\n }\n lineOffers {\n appliedRules {\n id\n endDate\n discountSetting {\n discountType\n }\n }\n }\n }\n promotions(category: $category) @include(if: $withPromotions) {\n promotionalOffers {\n promotionalOffers {\n startDate\n endDate\n discountSetting {\n discountType\n discountPercentage\n }\n }\n }\n upcomingPromotionalOffers {\n promotionalOffers {\n startDate\n endDate\n discountSetting {\n discountType\n discountPercentage\n }\n }\n }\n }\n }\n paging {\n count\n total\n }\n }\n }\n}\n", "query": query,
"variables": {"category": "games/edition/base|bundles/games|editors|software/edition/base", "count": 10, "variables": {"category": "games/edition/base|bundles/games|editors|software/edition/base", "count": 10,
"country": "DE", "keywords": text, "locale": locale, "sortDir": "DESC", "country": "DE", "keywords": text, "locale": locale, "sortDir": "DESC",
"allowCountries": locale.upper(), "allowCountries": locale.upper(),
@ -127,7 +143,6 @@ class ShopWidget(QWidget, Ui_ShopWidget):
request = QNetworkRequest(QUrl("https://www.epicgames.com/graphql")) request = QNetworkRequest(QUrl("https://www.epicgames.com/graphql"))
request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json") request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json")
self.search_request = self.manager.post(request, payload) self.search_request = self.manager.post(request, payload)
# self.search_request = self.manager.post(QNetworkRequest(QUrl("https://www.epicgames.com/graphql")), payload)
self.search_request.finished.connect(lambda: self.show_search_results(show_direct)) self.search_request.finished.connect(lambda: self.show_search_results(show_direct))
def show_search_results(self, show_direct=False): def show_search_results(self, show_direct=False):
@ -167,16 +182,22 @@ class ShopWidget(QWidget, Ui_ShopWidget):
if self.data: if self.data:
self.show_info.emit(self.data) self.show_info.emit(self.data)
else: else:
self.show_game.emit(self.data[0]) try:
result = self.data[0]
except IndexError:
print("error")
return
self.show_game.emit(result)
class GameWidget(QWidget): class GameWidget(QWidget):
show_info = pyqtSignal(str) show_info = pyqtSignal(dict)
def __init__(self, json_info, path: str): def __init__(self, json_info, path: str):
super(GameWidget, self).__init__() super(GameWidget, self).__init__()
self.layout = QVBoxLayout() self.layout = QVBoxLayout()
self.image = ImageLabel() self.image = ImageLabel()
self.json_info = json_info
for img in json_info["keyImages"]: for img in json_info["keyImages"]:
if img["type"] in ["DieselStoreFrontWide", "VaultClosed"]: if img["type"] in ["DieselStoreFrontWide", "VaultClosed"]:
width = 300 width = 300
@ -213,4 +234,36 @@ class GameWidget(QWidget):
self.setLayout(self.layout) self.setLayout(self.layout)
def mousePressEvent(self, a0: QtGui.QMouseEvent) -> None: def mousePressEvent(self, a0: QtGui.QMouseEvent) -> None:
self.show_info.emit(self.title) self.show_info.emit(self.json_info)
query = "query searchStoreQuery($allowCountries: String, $category: String, $count: Int, $country: String!, " \
"$keywords: String, $locale: String, $namespace: String, $withMapping: Boolean = false, $itemNs: String, " \
"$sortBy: String, $sortDir: String, $start: Int, $tag: String, $releaseDate: String, $withPrice: Boolean = " \
"false, $withPromotions: Boolean = false, $priceRange: String, $freeGame: Boolean, $onSale: Boolean, " \
"$effectiveDate: String) {\n Catalog {\n searchStore(\n allowCountries: $allowCountries\n " \
"category: $category\n count: $count\n country: $country\n keywords: $keywords\n locale: " \
"$locale\n namespace: $namespace\n itemNs: $itemNs\n sortBy: $sortBy\n sortDir: " \
"$sortDir\n releaseDate: $releaseDate\n start: $start\n tag: $tag\n priceRange: " \
"$priceRange\n freeGame: $freeGame\n onSale: $onSale\n effectiveDate: $effectiveDate\n ) {" \
"\n elements {\n title\n id\n namespace\n description\n " \
"effectiveDate\n keyImages {\n type\n url\n }\n currentPrice\n " \
"seller {\n id\n name\n }\n productSlug\n urlSlug\n url\n " \
" tags {\n id\n }\n items {\n id\n namespace\n }\n " \
"customAttributes {\n key\n value\n }\n categories {\n path\n " \
"}\n catalogNs @include(if: $withMapping) {\n mappings(pageType: \"productHome\") {\n " \
" pageSlug\n pageType\n }\n }\n offerMappings @include(if: $withMapping) " \
"{\n pageSlug\n pageType\n }\n price(country: $country) @include(if: " \
"$withPrice) {\n totalPrice {\n discountPrice\n originalPrice\n " \
"voucherDiscount\n discount\n currencyCode\n currencyInfo {\n " \
"decimals\n }\n fmtPrice(locale: $locale) {\n originalPrice\n " \
"discountPrice\n intermediatePrice\n }\n }\n lineOffers {\n " \
" appliedRules {\n id\n endDate\n discountSetting {\n " \
"discountType\n }\n }\n }\n }\n promotions(category: " \
"$category) @include(if: $withPromotions) {\n promotionalOffers {\n promotionalOffers {\n " \
" startDate\n endDate\n discountSetting {\n " \
"discountType\n discountPercentage\n }\n }\n }\n " \
"upcomingPromotionalOffers {\n promotionalOffers {\n startDate\n " \
"endDate\n discountSetting {\n discountType\n discountPercentage\n " \
" }\n }\n }\n }\n }\n paging {\n count\n " \
"total\n }\n }\n }\n}\n "

View file

@ -20,54 +20,32 @@ class Ui_ShopWidget(object):
self.search = QtWidgets.QLineEdit(ShopWidget) self.search = QtWidgets.QLineEdit(ShopWidget)
self.search.setObjectName("search") self.search.setObjectName("search")
self.verticalLayout.addWidget(self.search) self.verticalLayout.addWidget(self.search)
self.search_results = QtWidgets.QGroupBox(ShopWidget) self.free_game_group_box = QtWidgets.QGroupBox(ShopWidget)
self.search_results.setFlat(False) self.free_game_group_box.setObjectName("free_game_group_box")
self.search_results.setObjectName("search_results") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.free_game_group_box)
self.verticalLayout.addWidget(self.search_results)
self.free_game_group_box_2 = QtWidgets.QGroupBox(ShopWidget)
self.free_game_group_box_2.setObjectName("free_game_group_box_2")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.free_game_group_box_2)
self.verticalLayout_2.setObjectName("verticalLayout_2") self.verticalLayout_2.setObjectName("verticalLayout_2")
self.free_games_stack = QtWidgets.QStackedWidget(self.free_game_group_box_2) self.free_games_stack = QtWidgets.QStackedWidget(self.free_game_group_box)
self.free_games_stack.setObjectName("free_games_stack") self.free_games_stack.setObjectName("free_games_stack")
self.free_games_page = QtWidgets.QWidget()
self.free_games_page.setObjectName("free_games_page")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.free_games_page)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.free_game_now = QtWidgets.QGroupBox(self.free_games_page)
self.free_game_now.setObjectName("free_game_now")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.free_game_now)
self.horizontalLayout.setObjectName("horizontalLayout")
self.horizontalLayout_3.addWidget(self.free_game_now)
self.comming_free_game = QtWidgets.QGroupBox(self.free_games_page)
self.comming_free_game.setObjectName("comming_free_game")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.comming_free_game)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.horizontalLayout_3.addWidget(self.comming_free_game)
self.free_games_stack.addWidget(self.free_games_page)
self.verticalLayout_2.addWidget(self.free_games_stack) self.verticalLayout_2.addWidget(self.free_games_stack)
self.verticalLayout.addWidget(self.free_game_group_box_2) self.verticalLayout.addWidget(self.free_game_group_box)
self.games_groupbox_2 = QtWidgets.QGroupBox(ShopWidget) self.games_groupbox = QtWidgets.QGroupBox(ShopWidget)
self.games_groupbox_2.setObjectName("games_groupbox_2") self.games_groupbox.setObjectName("games_groupbox")
self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.games_groupbox_2) self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.games_groupbox)
self.horizontalLayout_7.setObjectName("horizontalLayout_7") self.horizontalLayout_7.setObjectName("horizontalLayout_7")
self.verticalLayout.addWidget(self.games_groupbox_2) self.verticalLayout.addWidget(self.games_groupbox)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem) self.verticalLayout.addItem(spacerItem)
self.retranslateUi(ShopWidget) self.retranslateUi(ShopWidget)
self.free_games_stack.setCurrentIndex(0) self.free_games_stack.setCurrentIndex(-1)
QtCore.QMetaObject.connectSlotsByName(ShopWidget) QtCore.QMetaObject.connectSlotsByName(ShopWidget)
def retranslateUi(self, ShopWidget): def retranslateUi(self, ShopWidget):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
ShopWidget.setWindowTitle(_translate("ShopWidget", "Form")) ShopWidget.setWindowTitle(_translate("ShopWidget", "Form"))
self.search.setPlaceholderText(_translate("ShopWidget", "Search Games")) self.search.setPlaceholderText(_translate("ShopWidget", "Search Games"))
self.search_results.setTitle(_translate("ShopWidget", "Search results")) self.free_game_group_box.setTitle(_translate("ShopWidget", "Free Games"))
self.free_game_group_box_2.setTitle(_translate("ShopWidget", "Free Games")) self.games_groupbox.setTitle(_translate("ShopWidget", "Other nice games"))
self.free_game_now.setTitle(_translate("ShopWidget", "Free Game"))
self.comming_free_game.setTitle(_translate("ShopWidget", "Comming Free Game"))
self.games_groupbox_2.setTitle(_translate("ShopWidget", "Other nice games"))
if __name__ == "__main__": if __name__ == "__main__":

View file

@ -22,17 +22,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QGroupBox" name="search_results"> <widget class="QGroupBox" name="free_game_group_box">
<property name="title">
<string>Search results</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="free_game_group_box_2">
<property name="title"> <property name="title">
<string>Free Games</string> <string>Free Games</string>
</property> </property>
@ -40,35 +30,15 @@
<item> <item>
<widget class="QStackedWidget" name="free_games_stack"> <widget class="QStackedWidget" name="free_games_stack">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>-1</number>
</property> </property>
<widget class="QWidget" name="free_games_page">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QGroupBox" name="free_game_now">
<property name="title">
<string>Free Game</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout"/>
</widget>
</item>
<item>
<widget class="QGroupBox" name="comming_free_game">
<property name="title">
<string>Comming Free Game</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2"/>
</widget>
</item>
</layout>
</widget>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QGroupBox" name="games_groupbox_2"> <widget class="QGroupBox" name="games_groupbox">
<property name="title"> <property name="title">
<string>Other nice games</string> <string>Other nice games</string>
</property> </property>

20
test.py
View file

@ -1,20 +0,0 @@
import sys
from PyQt5.QtCore import Qt, QStringListModel
from PyQt5.QtWidgets import QApplication, QCompleter, QLineEdit
def get_data(model):
model.setStringList(["completion", "data", "goes", "here"])
if __name__ == "__main__":
app = QApplication(sys.argv)
edit = QLineEdit()
completer = QCompleter()
edit.setCompleter(completer)
model = QStringListModel()
completer.setModel(model)
get_data(model)
edit.show()
sys.exit(app.exec_())