gpt4 book ai didi

Python。使用 Gtk GUI 在后台做一些工作

转载 作者:太空狗 更新时间:2023-10-29 22:27:41 24 4
gpt4 key购买 nike

  • python 3.2.2
  • gtk3 3.2.2
  • python-gobject 3.0.2

我正在尝试显示一个 GUI 并在后台做一些工作。据我了解,它应该看起来像这样:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


import time
from threading import Thread
from gi.repository import Gtk, Gdk

class Gui():
def run(self):
self.Window = Gtk.Window()
self.Window.set_border_width(8)
self.Window.set_title("Некий GUI")
self.Window.connect('destroy', lambda x: self.stop())

self.outBut = Gtk.Button.new_from_stock(Gtk.STOCK_OK)
self.outBut.set_size_request(150, 35)
self.outBut.connect('clicked', lambda x: self.passfun)
self.Window.add(self.outBut)

self.Window.show_all()

def stop(self):
Gtk.main_quit()

def passfun(self):
pass

class LoopSleep(Thread):
def run(self):
i = 1
while True:
print(i)
i = i + 1
#time.sleep(1)



gui = Gui()
gui.run()

loopSleep = LoopSleep()
loopSleep.start()

Gdk.threads_init()
Gdk.threads_enter()
Gtk.main()
Gdk.threads_leave()

但它不起作用。按下按钮时会出现几个循环。并且循环在窗口关闭后运行。但不是在一起。

我做错了什么?

最佳答案

不能声称自己是 python 线程或 gtk3 方面的任何专家,但在对您的示例进行了一些尝试之后,我发现了一些似乎可以按照您想要的方式工作的东西。我使用 threading.start(target=loop_sleep) 而不是子类化 Thread,并将它放在 Gui 中。

似乎还需要 Glib.threads_init()。

#!/usr/bin/env python3
from gi.repository import Gtk,Gdk, GLib
import threading
import time

class Gui(Gtk.Window):
def __init__(self):
self.Window = Gtk.Window()
self.Window.set_border_width(8)
self.Window.set_title("Некий GUI")
self.Window.connect('destroy', lambda x: self.stop())

self.outBut = Gtk.Button.new_from_stock(Gtk.STOCK_OK)
self.outBut.set_size_request(150, 35)
self.Window.connect('destroy', lambda x: self.stop())
self.Window.add(self.outBut)

self.Window.show_all()
threading.Thread(target=loop_sleep).start()

def stop(self):
Gtk.main_quit()

def passfun(self):
pass

def loop_sleep():
i = 1
while True:
print(i)
i = i + 1
#time.sleep(1)



app = Gui()
GLib.threads_init()
Gdk.threads_init()
Gdk.threads_enter()
Gtk.main()
Gdk.threads_leave()

关于Python。使用 Gtk GUI 在后台做一些工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8120860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com