tkinter+requests练习

本文介绍如何使用tkinter进行桌面程序开发,涉及控件布局调整、通过command与bind实现功能调用,以及如何运用多线程处理爬虫任务,包括图片显示与内存管理。

想用tkinter写个桌面程序
tkinter参考资料主要有官方文档,还有一本台湾人写的书tkinter菜鸟编程.此外还有一堆抄来抄去的书.我觉得只要多练就行了,看看官方写的代码

主要解决问题:

  1. tkinter的控件布局.整洁好看,不过这并不是最重要的
  2. 调用程序,触发一个选项后要有调用的函数
  3. 多线程.不然界面会出现未响应

一些小问题 控件的大小,字体颜色与大小 利用python打开资源管理器Python调Windows的资源管理器打开指定目录 - famiover - OSCHINA - 中文开源技术交流社区

1.布局问题

tkinter布局一般,不像PyQt拖拽式那样简单.

一般用到的控件Label,Entry,Button,messagebox,menu,text,toplevel(打开新窗口)

像按钮啥的暂时用不上

同时还有添加图像时有时图片太大,可以利用

from PIL import Image
photo = Image.open("小猫.jpg")  #括号里为需要显示在图形化界面里的图片
   
photo = photo.resize((400,400))  #规定图片大小

python 使用图形化界面tkinter显示图片 规定大小!_地中海的博客-优快云博客_tkinter设置图片大小

2.调用程序

tkinter两种方法

command调用与bind绑定

不过我发现

控件command=callback传参不方便,只能利用

  1. lambda函数

  2. IntVar() StringVar()等这种变量设置

而bind会传一个参数event

可以得到相关参数(例如鼠标点击位置啥的)

建议一个空间不要同时用这两个调用

3.多线程

主要是要将桌面主程序与爬虫等程序分开

上次讲了python多线程利用threading模块的两种写法

import thread
import time
class Mythread(threading.Thread):
    def __init__(self,name=None):
        super().__init__(name=name)
    def run(self):
        for i in range(5):
            n = threading.currentThread()
            time.sleep(1)
            print("现在是{0}的第{1}次".format(n.name,i))
        print("子线程执行完了")
if __name__ == "__main__":
    mythread = Mythread("张三")
    mythread.setDaemon(True) #守护线程,当主线程执行完后,子线程强制关闭
    mythread.start()
    mythread.join() #必须当这个子线程执行完,主线程才开始执行
    for i in range(5):
        time.sleep(1)
        n = threading.currentThread()
        print("现在是{0}的第{1}次".format(n.name, i))
    

image-20210731230339270

可以看出join之后子线程先执行完,若去掉join

image-20210731230516420

注意主线程与子线程同时执行并且当主线程执行完,子线程关闭

遇到的问题

特别注意的是,我添加图片时,如果在函数里添加,那么图片就没了(程序没有报错,但图片显示空白)

我把那段代码改在主函数里就行了,猜测可能是因为GC机制回收了

完整代码

import time
from tkinter.ttk import *
import tkinter as tk
from tkinter import *
import requests
from tkinter import messagebox
from lxml import etree
import os
import os.path
import threading
from PIL import Image, ImageTk


class Application(tk.Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.button = tk.Button(self, text="确定", )  # command=self.get_info)
        self.entry = tk.Entry(self, font="times 15")
        self
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

procoder338

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值