鱼C论坛

 找回密码
 立即注册
查看: 1943|回复: 14

[已解决]tkinter界面卡死,求助

[复制链接]
发表于 2020-7-31 16:41:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码:
# -*- coding: utf-8 -*-
from requests import get
from re import search
import time as ti
import tkinter as tk
import tkinter.messagebox
from threading import Thread
# 注:\1 用于引用前面编号为 1 的子组
a = []
root = tk.Tk()
root.title("求助帖提醒")
t = tk.Text(root)
t.pack()
def load():
    while True:
        res = get(f"https://fishc.com.cn/bestanswer.php?mod=huzhu&type=undo").text
        # 获取问题帖的名字
        name = search(r'<a href="https://fishc.com.cn/thread-\d+?-1-1.html" target="_blank">(.+?)</a>', res).group(1)
        #获取问题帖的URL
        url = "https://fishc.com.cn/thread-"+search(r'<a href="https://fishc.com.cn/thread-(.+?)-1-1.html" target="_blank"',res).group(1)+"-1-1.html"
        # 获取回答数
        ans = search(r'<font color="#999999">(\d+?)</font>', res).group(1)
        # 获取时间
        time = search(r'<font color="#999999">(\d+?-\d+?-\d+? \d+?:\d+?)</font>', res).group(1)
        if name not in a:
            b = f" 标题:{name}\n 回答数:{ans}\n 提问时间:{time}\n 地址:{url}\n\n"
            t.insert(tk.END,b)    # 打印相应的内容
            tkinter.messagebox.showwarning("提示",b)
            a.append(name)
        ti.sleep(5)

func = Thread(target=load)
func.setDaemon(True)
func.run()
root.mainloop()

开了线程了,但是毫无作用
最佳答案
2020-7-31 17:16:25
本帖最后由 nahongyan1997 于 2020-7-31 17:18 编辑

func.run() 改成 func.start()  问题已解决 !!!!!




顺便说一句,你的代码归我了

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-31 16:46:07 | 显示全部楼层
本帖最后由 zltzlt 于 2020-7-31 16:53 编辑


# -*- coding: utf-8 -*-
from requests import get
from re import search
import tkinter as tk
import tkinter.messagebox
from threading import Thread

# 注:\1 用于引用前面编号为 1 的子组
a = []
root = tk.Tk()
root.title("求助帖提醒")
t = tk.Text(root)
t.pack()


def load():
    res = get(f"https://fishc.com.cn/bestanswer.php?mod=huzhu&type=undo").text
    # 获取问题帖的名字
    name = search(r'<a href="https://fishc.com.cn/thread-\d+?-1-1.html" target="_blank">(.+?)</a>', res).group(1)
    # 获取问题帖的URL
    url = "https://fishc.com.cn/thread-" + search(
        r'<a href="https://fishc.com.cn/thread-(.+?)-1-1.html" target="_blank"', res).group(1) + "-1-1.html"
    # 获取回答数
    ans = search(r'<font color="#999999">(\d+?)</font>', res).group(1)
    # 获取时间
    time = search(r'<font color="#999999">(\d+?-\d+?-\d+? \d+?:\d+?)</font>', res).group(1)
    if name not in a:
        b = f" 标题:{name}\n 回答数:{ans}\n 提问时间:{time}\n 地址:{url}\n\n"
        t.insert(tk.END, b)  # 打印相应的内容
        tkinter.messagebox.showwarning("提示", b)
        a.append(name)


func = Thread(target=load)
func.setDaemon(True)
func.run()
root.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-31 16:48:20 | 显示全部楼层
zltzlt 发表于 2020-7-31 16:46
你都 while True 了,不卡死才怪


可我想它等5秒就抓取一次呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 16:50:19 | 显示全部楼层
本帖最后由 zltzlt 于 2020-7-31 17:19 编辑
xiaosi4081 发表于 2020-7-31 16:48
可我想它等5秒就抓取一次呀


那就把 if name not in a 去掉
# -*- coding: utf-8 -*-
from requests import get
from re import search
import time as ti
import tkinter as tk
import tkinter.messagebox
from threading import Thread

# 注:\1 用于引用前面编号为 1 的子组
a = []
root = tk.Tk()
root.title("求助帖提醒")
t = tk.Text(root)
t.pack()


def load():
    while True:
        res = get(f"https://fishc.com.cn/bestanswer.php?mod=huzhu&type=undo").text
        # 获取问题帖的名字
        name = search(r'<a href="https://fishc.com.cn/thread-\d+?-1-1.html" target="_blank">(.+?)</a>', res).group(1)
        # 获取问题帖的URL
        url = "https://fishc.com.cn/thread-" + search(
            r'<a href="https://fishc.com.cn/thread-(.+?)-1-1.html" target="_blank"', res).group(1) + "-1-1.html"
        # 获取回答数
        ans = search(r'<font color="#999999">(\d+?)</font>', res).group(1)
        # 获取时间
        time = search(r'<font color="#999999">(\d+?-\d+?-\d+? \d+?:\d+?)</font>', res).group(1)
        b = f" 标题:{name}\n 回答数:{ans}\n 提问时间:{time}\n 地址:{url}\n\n"
        t.insert(tk.END, b)  # 打印相应的内容
        tkinter.messagebox.showwarning("提示", b)
        a.append(name)
        ti.sleep(5)


func = Thread(target=load)
func.setDaemon(True)
func.run()
root.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 16:51:34 | 显示全部楼层
zltzlt 发表于 2020-7-31 16:46
你都 while True 了,不卡死才怪

不是这个上的问题,根本问题是线程里的函数不对,开启另一个线程是为了让爬取的同时不影响,tkinter显示,而他在另一个线程里有关于tkinter的操作,应该把关于tkinter的相关操作放在load函数外面

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-31 17:00:54 | 显示全部楼层
v.ki 发表于 2020-7-31 16:51
不是这个上的问题,根本问题是线程里的函数不对,开启另一个线程是为了让爬取的同时不影响,tkinter显示 ...

那怎么改?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 17:16:25 | 显示全部楼层    本楼为最佳答案   
本帖最后由 nahongyan1997 于 2020-7-31 17:18 编辑

func.run() 改成 func.start()  问题已解决 !!!!!




顺便说一句,你的代码归我了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 17:19:09 | 显示全部楼层

把 if name not in a 去掉
# -*- coding: utf-8 -*-
from requests import get
from re import search
import time as ti
import tkinter as tk
import tkinter.messagebox
from threading import Thread

# 注:\1 用于引用前面编号为 1 的子组
a = []
root = tk.Tk()
root.title("求助帖提醒")
t = tk.Text(root)
t.pack()


def load():
    while True:
        res = get(f"https://fishc.com.cn/bestanswer.php?mod=huzhu&type=undo").text
        # 获取问题帖的名字
        name = search(r'<a href="https://fishc.com.cn/thread-\d+?-1-1.html" target="_blank">(.+?)</a>', res).group(1)
        # 获取问题帖的URL
        url = "https://fishc.com.cn/thread-" + search(
            r'<a href="https://fishc.com.cn/thread-(.+?)-1-1.html" target="_blank"', res).group(1) + "-1-1.html"
        # 获取回答数
        ans = search(r'<font color="#999999">(\d+?)</font>', res).group(1)
        # 获取时间
        time = search(r'<font color="#999999">(\d+?-\d+?-\d+? \d+?:\d+?)</font>', res).group(1)
        b = f" 标题:{name}\n 回答数:{ans}\n 提问时间:{time}\n 地址:{url}\n\n"
        t.insert(tk.END, b)  # 打印相应的内容
        tkinter.messagebox.showwarning("提示", b)
        a.append(name)
        ti.sleep(5)


func = Thread(target=load)
func.setDaemon(True)
func.run()
root.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 17:19:27 | 显示全部楼层

顺便说下,我给你发的站内消息你还没回复我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-31 17:19:28 | 显示全部楼层
nahongyan1997 发表于 2020-7-31 17:16
func.run() 改成 func.start()  问题已解决 !!!!!

无所谓,反正我也是要公开的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 17:23:55 | 显示全部楼层
zltzlt 发表于 2020-7-31 17:19
顺便说下,我给你发的站内消息你还没回复我

我的答案是对的,问题没有那么复杂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 17:24:27 | 显示全部楼层
nahongyan1997 发表于 2020-7-31 17:23
我的答案是对的,问题没有那么复杂

为什么我的帖子还没过审核,都好几天了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 17:26:16 | 显示全部楼层
xiaosi4081 发表于 2020-7-31 17:19
无所谓,反正我也是要公开的

满意设置最佳答案呦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 17:27:02 | 显示全部楼层
xiaosi4081 发表于 2020-7-31 17:19
无所谓,反正我也是要公开的

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 19:28:49 | 显示全部楼层
我第一次专辑求助帖……主要是看上你的代码了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 17:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表