有一段代码将未启动的沙箱标记为红色。该函数start_btn()
检查 CheckButtons,然后启动标记的按钮,标签立即着色为绿色。问题是什么 - 如何确保
self.builder.get_object(f"status_label_{box}").set_markup("бла бла бла")
在重新调用start_box()
循环启动框的函数之前,在该行之后有 N 秒的超时,但是这个超时不应该阻塞 GUI,也就是说,它会time.sleep()
飞走立即地
import gi
import os
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk, GLib
sandboxie_path = "C:/Program Files/Sandboxie-Plus/Start.exe" # Путь к Start.exe
Steam_path = "C:/Program Files (x86)/Steam/steam.exe" # Путь к steam.exe
tn_host = "127.0.0.1"
port_list = ["2121", "2122", "2123", "2124", "2125", "2126"]
server_list = ["85.88.162.140:27031"]
check_list = []
def start_box(box_num, tn_port, server, sandbox_path, steam_path):
os.popen(f'"{sandbox_path}" /box:{box_num} "{steam_path}" -applaunch 730 -netconport {tn_port} -novid '
f'-window -nosound +fps_max 30 -w 640 -h 480 +left connect {server}')
class Main:
def __init__(self):
gladeFile = "res/csgo.glade"
self.builder = Gtk.Builder()
self.builder.add_from_file(gladeFile)
self.builder.connect_signals(self)
window = self.builder.get_object("main")
window.connect('delete-event', Gtk.main_quit)
window.show()
def red_mark(self):
for num in range(1, 7):
self.builder.get_object(f"status_label_{num}").set_markup("<span background='#FA6DA4' "
"foreground='#000000'>OFF</span>")
def start_btn(self, widget):
for box in range(1, 7):
if self.builder.get_object(f"check_btn_{box}").get_active():
start_box(box, port_list[box - 1], server_list[0], sandboxie_path, Steam_path)
self.builder.get_object(f"status_label_{box}").set_markup("<span background='#76EE98' "
"foreground='#000000'>ON</span>")
# Тайм-аут на N секунд
if __name__ == '__main__':
main = Main()
main.red_mark()
Gtk.main()
决定这样:
我将标签绘画翻译
self.builder.get_object(f"status_label_{box_num}").set_markup("<span background='#76EE98' foreground='#000000'>ON</span>")
成一个函数start_box()
,在函数中的循环中start_btn()
添加bool
了一个带初始值的计数器,False
并将循环分为两个条件,让True
遇到的第一个将计数器切换到True
并立即启动第一个选中的框,接下来的间隔为 15 秒,使用threading.Timer
.这是目前的样子