私のアプリケーションで私は、APIから新しいデータを取得するときにラベルテキストを変更しようとしています。私の問題は、私のGUIがハングアップする少しの時間の後です。それと同時に、常にそれが半時間ぶりに実行された後に、アプリケーションを実行することを開始した後に、その一時停止がいつもそうであるとは限りません。PyGObjectラベルの問題
唯一のGUIがハングアップすると、プログラム自体が実行され続け、コンソールに出力されます。
ラベルテキストの更新は余分なスレッドで実行されます。
class GUI():
def get_assets(self,trader):
assets={}
if trader=="kraken":
pass
elif trader=="cex":
query=info_CEX()
res=query.get_balance()
for key in res:
try:
assets[key]={}
assets[key]["available"]=res[key]["available"]
assets[key]["orders"]=res[key]["orders"]
except(KeyError,TypeError):
continue
return assets
def update_asset_labels(self,trader):
assets=self.get_assets(trader)
for key in assets:
try:
label=self.builder.get_object("BX"+key)
label.set_text(str(float(assets[key]["available"]))+"/"+str(float(assets[key]["orders"])))
except(AttributeError):
if key=="EUR":
label=self.builder.get_object("kapital")
label.set_text(str(float(assets[key]["available"])))
continue
def app(self):
"""Initialisiert die graphischen Oberfläche.
"""
UI_FILE = PFAD+"/PYtraderGUI.ui"
self.builder = Gtk.Builder()
self.builder.add_from_file(UI_FILE)
self.builder.connect_signals(self)
self.window = self.builder.get_object("window1")
"""self.window.maximize()"""
self.window.show_all()
def update_info():
price=["None"] * 11
oldprice=["None"] * 11
chan=0
start_price=0
query=infokraken.infokraken()
trader="cex"
while True:
try:
self.update_asset_labels(trader)
pass
except (ValueError):
continue
thread1 = threading.Thread(target=update_info)
thread1.daemon = True
thread1.start()
if __name__ == "__main__":
GObject.threads_init()
GO=GUI()
GO.connect("delete-event", Gtk.main_quit)
GO.show_all()
GO.app()
Gtk.main()