想用tkinter写个桌面程序
tkinter参考资料主要有官方文档,还有一本台湾人写的书tkinter菜鸟编程.此外还有一堆抄来抄去的书.我觉得只要多练就行了,看看官方写的代码
主要解决问题:
- tkinter的控件布局.整洁好看,不过这并不是最重要的
- 调用程序,触发一个选项后要有调用的函数
- 多线程.不然界面会出现未响应
一些小问题 控件的大小,字体颜色与大小 利用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传参不方便,只能利用
-
lambda函数
-
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))

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

注意主线程与子线程同时执行并且当主线程执行完,子线程关闭
遇到的问题
特别注意的是,我添加图片时,如果在函数里添加,那么图片就没了(程序没有报错,但图片显示空白)
我把那段代码改在主函数里就行了,猜测可能是因为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

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

被折叠的 条评论
为什么被折叠?



