相关疑难解决方法(0)

sys.exit对多线程有什么作用?

我对python中的sys.exit()感到很困惑.在python文档中,它说"退出Python"; 这是否意味着sys.exit()在python程序中调用时,进程将退出?如果是这样,下面的代码显示了不同的结果:

import sys
import time
import threading

def threadrun():
    while(True):
        time.sleep(1)

if __name__=="__main__":
    t=threading.Thread(target=threadrun)
    t.start()
    sys.exit()
Run Code Online (Sandbox Code Playgroud)

在Linux中启动这个程序,结果不是python文档说的那个预期的,但仍然在系统中运行,那么sys.exit()真正做到了什么?

python multithreading exit

11
推荐指数
2
解决办法
1660
查看次数

在Tkinter中执行函数期间程序冻结

我为我的一个脚本创建了一个小GUI.一切都运作良好.

当我点击一个Button时,它会启动一个很大的功能,即从一些网站解析大量数据.

但是一旦我点击按钮,程序就会冻结,直到完全运行该功能.一切正常,但为什么我的GUI在执行函数期间冻结.我想打印一个小进度条,但这是不可能的.

这是该计划的一部分:

    self.Button1 = Button(self.MENU, text="IELTS", command=self.My_Command)
    self.Button1.grid(row=0, column=0,sticky=W+E)

def My_Command(self):

    ## HERE WE LAUNCH THE FUNCTION
    Module_1.main() # My Big Function from another file

    self.Button1.config(text="DONE")
Run Code Online (Sandbox Code Playgroud)

我无法在执行Module_1.main()时执行/打印任何内容...... GUI完全冻结.

Module_1.main()函数是一个线程解析器(解析来自两个网站的一些数据),一般需要2分钟才能运行.如果某人有想法在执行此功能所需的2分钟内能够与程序进行交互,那将非常有帮助.

python user-interface multithreading tkinter

7
推荐指数
1
解决办法
7212
查看次数

如何将进度条连接到函数?

我正在尝试将进度条连接到我的项目的功能.

这是我到目前为止,但我很确定它什么都不做:

def main():
    pgBar.start()
    function1()
    function2()
    function3()
    function4()
    pgBar.stop()
Run Code Online (Sandbox Code Playgroud)

以下是我创建进度条的代码,如果有帮助的话:

pgBar = ttk.Progressbar(window, orient = HORIZONTAL, length=300, mode = "determinate")
pgBar.place(x=45, y=130)
Run Code Online (Sandbox Code Playgroud)

我一直在做一些研究,并了解tkinter窗口在运行函数或类似的东西时冻结.有没有办法在主要内部调用的每个函数的末尾"解冻"窗口?

python tkinter

7
推荐指数
2
解决办法
2万
查看次数

为什么在Tkinter进程后出现ttk Progressbar

我想在Tkinter菜单命令上创建一个大文本,并通过进度条提供视觉支持.虽然进度条要在后续耗时循环之前启动,但只有在创建和显示大文本后才会显示进度条.

def menu_bar(self):
    self.create_menu.add_command(label="Create large file", 
    command=self.create_large_file)

def create_large_file(self):
    self.progressbar = ttk.Progressbar(self.master, mode='indeterminate')
    self.progressbar.pack()
    self.progressbar.start()
    self.text.delete(1.0, 'end')
    self.file_content = []

i = 0
while i < 2000000:
    line = lfd.input_string
    self.file_content.append(line + "\n")
    i += 1

self.file_content = ''.join(self.file_content)
self.text.insert(1.0, self.file_content) 
Run Code Online (Sandbox Code Playgroud)

python ttk progress-bar

5
推荐指数
1
解决办法
7862
查看次数

Tkinter.在方法冻结窗口之后?

我有一个简单的聊天客户端,我试图将其Tkinter作为界面使用.我的问题是,当为聊天输入/输出运行mainloopwith 时.after,窗口会冻结并阻塞,直到收到另一条消息.

class Client(Frame):

    def __init__(self, **kwargs):
        Frame.__init__(self, Tk())
        self.pack()

        self.lb = Listbox(self, width=100, height=30)
        self.lb.pack()

        self.show_data = self.lb.after(1000, self.chat_handle)

        self.entry = Entry(self)
        self.entry.bind('<Return>', self.input_handle)
        self.entry.pack(side=BOTTOM, fill=X)

    def input_handle(self, event):
        msg = self.entry.get()
        self.entry.delete(0, 'end')
        new_msg = 'privmsg %s :' % self.channel + msg + '\r\n'
        self.client.sendall(new_msg)
        self.lb.insert(END, self.nick + ' | ' + msg)

    def chat_handle(self):
        try:
            self.data = self.client.recvfrom(1024)
        except socket.error:
            self.lb.insert(END, "Bad Connection!")
            return
        if self.data and len(self.data[0]) > 0:
            self.lb.insert(END, …
Run Code Online (Sandbox Code Playgroud)

python sockets events tkinter

5
推荐指数
2
解决办法
2847
查看次数

从错误的线程中垃圾收集的 Tkinter 对象

我似乎tkinter通过使用一些多线程来破坏linux。据我所知,我设法在不是主 GUI 线程的线程上触发垃圾回收。这导致__del__在一个tk.StringVar实例上运行,该实例试图tcl从错误的线程调用堆栈,从而导致 linux 上的混乱。

下面的代码是我能想出的最小例子。请注意,我没有用 做任何实际工作matplotlib,但否则我无法触发问题。在__del__对方法Widget验证的Widget情况下被从其他线程删除。典型的输出是:

Running off thread on 140653207140096
Being deleted... <__main__.Widget object .!widget2> 140653210118576
Thread is 140653207140096
... (omitted stack from from `matplotlib`
  File "/nfs/see-fs-02_users/matmdpd/anaconda3/lib/python3.6/site-packages/matplotlib/text.py", line 218, in __init__
    elif is_string_like(fontproperties):
  File "/nfs/see-fs-02_users/matmdpd/anaconda3/lib/python3.6/site-packages/matplotlib/cbook.py", line 693, in is_string_like
    obj + ''
  File "tk_threading.py", line 27, in __del__
    traceback.print_stack()
...
Exception ignored in: <bound method Variable.__del__ of <tkinter.StringVar object at 0x7fec60a02ac8>>
Traceback …
Run Code Online (Sandbox Code Playgroud)

tkinter matplotlib python-multithreading python-3.x

5
推荐指数
1
解决办法
1363
查看次数

如何定期更改 tkinter 图像?

我有一个图像保存在一个文件中test.bmp,该文件每秒被覆盖 2 次
\n(我想每秒显示 2 个图像)。

\n\n

这是我到目前为止所拥有的:

\n\n
import tkinter as tk\nfrom PIL import Image, ImageTk\n\nroot = tk.Tk()\nimg_path = 'test.bmp'\nimg = ImageTk.PhotoImage(Image.open(img_path), Image.ANTIALIAS))\n\ncanvas = tk.Canvas(root, height=400, width=400)\ncanvas.create_image(200, 200, image=img)\ncanvas.pack()\n\nroot.mainloop()\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我不知道如何每隔 \xc2\xbd 秒刷新图像?
\n我正在使用 Python3 和 Tkinter。

\n

python image tkinter python-3.x

3
推荐指数
1
解决办法
3638
查看次数

Python tkinter GUI 冻结/崩溃

from Tkinter import *
import tkFileDialog
import tkMessageBox
import os
import ttk

import serial
import timeit
import time

######################################################################################
class MyApp:
    def __init__(self, parent):
########################################################
#Setup Frames

        self.MiddleFrame = Frame(parent) #Middle Frame
        self.MiddleFrame.pack()
        #GLOBAL VARIABLES
        self.chip_number = 0 #number of chip testing
###########################################
        #Middle Frame setup  
        Label(self.MiddleFrame, text='Done').grid(row=8, column=1, sticky = E)
        self.Done = Canvas(self.MiddleFrame, bg="yellow", width=10, height=10)
        self.Done.grid(row=8, column=2)         
        Label(self.MiddleFrame, text='Chip Number:').grid(row=9, column=1, sticky = E)
        #start button
        self.button1 = Button(self.MiddleFrame,state=NORMAL, command= self.start_pre)
        self.button1["text"]= "START"
        self.button1.grid(row=1, column=2, sticky = …
Run Code Online (Sandbox Code Playgroud)

python tkinter

-1
推荐指数
1
解决办法
1万
查看次数