python3.6.0-32 sqlite tkdnd tkinterdnd2 拖拽 快捷方式管理

python3.6.0-32 sqlite tkdnd tkinterdnd2 拖拽 快捷方式管理

快捷方式管理(pyqt5升级版,不在对这篇更新)https://blog.51cto.com/ikezcn/2166426
连接sqlite3
python软件:https://www.python.org/ftp/python/3.6.0/python-3.6.0.exe

pytho自带sqlite3,所以只需要import
简单例子:

import sqlite3
db = sqlite3.connect("./db") #在调用connect函数并指定库名称,如果不存在会按指定库名称自动创建.
cu = db.cursor()#游标
#cu.execute("create table lj(id integer primary key,lj text not NULL)") #执行sql语句
#cu.execute("insert into lj(lj) values('c:\python27')")
db.commit()#事务提交
cu.execute("select * from lj;")#查询
print cu.fetchall()#打印查询结果,结果是{1 {c:\python27}}
cu.close()#关闭游标
db.close()#关闭数据库连接

官方超详细说明:https://docs.python.org/3.7/library/sqlite3.html


pywin32这个库主要包含win32api和win32con
安装:pip install pywin32
简单例子:

import win32api
import win32con
win32api.MessageBox(win32con.NULL, '显示内容', '标题', win32con.MB_OK)
win32api.ShellExecute(0,'open',r'D:.txt','','',1)#不会像os.system弹出黑框

windnd对 windows 桌面图标拖拽加载路径
安装:pip install windnd
简单例子:

from tkinter import *
import windnd

for idx,i in enumerate(ls):
    print(idx,i)

tk = Tk()
windnd.hook_dropfiles(tk,func = my_func
tk.mainloop() 

ps:遇到问题,在使用滚动条的时候会发生错误,没有继续调试下去,换了tkdnd


tkdnd2.8 tkinterDnD2
软件:
tkdnd2.8 https://sourceforge.net/projects/tkdnd/
TkinterDnD2 http://sourceforge.net/projects/tkinterdnd/files/

安装:
将tkdnd2.8文件夹复制到c:\Python36-32\tcl\
将TkinterDnD2文件夹复制到C:\Python36-32\Lib\ (下载的是TkinterDnD2-0.2文件夹要复制的是里面的那个)

简单例子:
直接使用TkinterDnD2-0.2文件夹下的demo


快捷方式管理
故事的开头:公司妹子突然发彪说快捷方式全部消失.不高兴找原因了,然后找的软件被嫌弃太复杂,所以…自己写了一个功能简单的软件
喜欢的拿去随便用不过记得点赞.我会不定期的更新,需要增加功能的朋友请留言
python3.6.0-32 sqlite tkdnd tkinterdnd2 拖拽 快捷方式管理

# -*- coding: utf-8 -*-
#ver1.0 20180719
import platform
from TkinterDnD2 import *
from tkinter import *
import win32api
import win32con
import sqlite3
import os

def delCallBack():
    if listbox.curselection() == ():
        return
    cu.execute("update lj set isdel = 1 where lj=?",(listbox.get(listbox.curselection()),))
    if db.commit() == None:
        listbox.delete(listbox.curselection())
    else:
        win32api.MessageBox(win32con.NULL, '删除时错误',  '错误!', win32con.MB_OK)

def alldelCallBack():
    cu.execute('update lj set isdel = 1')
    if db.commit() == None:
        listbox.delete(0,'end')
    else:
        win32api.MessageBox(win32con.NULL, '全部删除时错误',  '错误!', win32con.MB_OK)

def flushCallBack():
    listbox.delete(0,END)
    tables = cu.execute("select * from lj where isdel = 0 order by lj")
    for table in tables.fetchall():
        listbox.insert('end',table[1])

def printList(event):
    if os.path.exists(listbox.get(listbox.curselection())):
        win32api.ShellExecute(0,'open',listbox.get(listbox.curselection()),'','',1)
    else:
        win32api.MessageBox(win32con.NULL, '打开错误',  '错误!', win32con.MB_OK)

def vacuumCallBack():
    cu.execute('delete from lj where isdel = 1')
    if db.commit() == None:
        cu.execute('VACUUM')
    else:
        win32api.MessageBox(win32con.NULL, '数据整理错误',  '错误!', win32con.MB_OK)

def drop(event):
    if event.data:
        files = listbox.tk.splitlist(event.data)
        for f in files:
            if os.path.exists(f):
                tables = cu.execute("select 1 from lj where lj=? and isdel = 0 limit 1",(os.path.abspath(f),))
                for table in tables.fetchall():
                    if table[0] == 1:
                        win32api.MessageBox(win32con.NULL, '数据重复',  '错误!', win32con.MB_OK)
                        return
                cu.execute("insert into lj(lj) values(?)",(os.path.abspath(f),))
                if db.commit() == None:
                    listbox.insert('end',os.path.abspath(f))
                else:
                     win32api.MessageBox(win32con.NULL, '新增-放入数据库',  '错误!', win32con.MB_OK)
            else:
                win32api.MessageBox(win32con.NULL, '新增-文件不存在',  '错误!', win32con.MB_OK)
    return event.action

db = sqlite3.connect("./db")
cu = db.cursor()
tables = cu.execute("SELECT COUNT(*) FROM sqlite_master where type ='table' and name =?",('lj',))
for table in tables.fetchall():
    if table[0] == 0:
        cu.execute("create table lj(id integer primary key,lj text not NULL,isdel BOOLEAN DEFAULT 0)")
        cu.execute("create index lj_index on lj(lj)")
        cu.execute("create index isdel_index on lj(isdel)")
        db.commit()

root = TkinterDnD.Tk()
root.withdraw()
root.title('快捷方式管理')
root.grid_rowconfigure(1, weight=1, minsize=800)
root.grid_columnconfigure(0, weight=1, minsize=800)

scrollbar = Scrollbar(root)
scrollbar.grid(row=1,column=1,sticky='ns')

listbox = Listbox(root, name='listbox',selectmode='extended',yscrollcommand = scrollbar.set, width=1, height=1)
listbox.bind('<Double-Button-1>',printList)
listbox.grid(row=1, column=0, padx=5, pady=5, sticky='news')

scrollbar.config(command = listbox.yview)

tables = cu.execute("select * from lj where isdel = 0 order by lj")
for table in tables.fetchall():
    listbox.insert('end',table[1])

menubar = Menu(root)
menubar1 = Menu(root)
menubar1.add_command(label='全部删除',command=alldelCallBack)
menubar1.add_command(label='整理数据库',command=vacuumCallBack)
menubar.add_command(label="删除",command=delCallBack)
menubar.add_cascade(label="设置",menu=menubar1)
menubar.add_command(label="刷新",command=flushCallBack)

listbox.drop_target_register(DND_FILES)
listbox.dnd_bind('<<Drop>>', drop)

root.config(menu=menubar)
root.update_idletasks()
root.deiconify()
root.mainloop()

数据库 db
CREATE TABLE lj(id integer primary key,lj text not NULL,isdel BOOLEAN DEFAULT 0)

转载于:https://blog.51cto.com/ikezcn/2142638

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101547.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • curl的速度为什么比file_get_contents快以及具体原因

    curl的速度为什么比file_get_contents快以及具体原因

  • 保存并退出vi的命令_vim退出并保存

    保存并退出vi的命令_vim退出并保存vi(vim)是上Linux非常常用的代码编辑器,很多Linux发行版都默认安装了vi(vim)。vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率。vi是“visualinterface”的缩写,vim是viIMproved(增强版的vi)。在一般的系统管理维护中vi就够用,如果想使用代码加亮的话可以使用vim基本上vi可以分为三种状态,分别是命令模式(commandmode)、插…

  • leapFTP上传网页到服务器,leapftp登录ftp服务器

    leapFTP上传网页到服务器,leapftp登录ftp服务器leapftp登录ftp服务器内容精选换一换本节为您介绍如何在本机使用远程登录工具MSTSC登录Windows弹性云服务器。弹性云服务器状态为“运行中”。如果弹性云服务器采用密钥方式鉴权,已获取Windows弹性云服务器的密码,获取方式请参见获取Windows弹性云服务器的密码。弹性云服务器已经绑定弹性公网IP,绑定方式请参见绑定弹性公网IP。使用MSTSC方式通过内网登录云服务器华为云帮助中心…

    2022年10月24日
  • android之 Activity跳转出现闪屏

    android之 Activity跳转出现闪屏属于个人开发小知识应用Activity之间相互跳转时可能会出现闪屏现象原因:由于finish原因,网传,在onPause()里延迟3s使用finish。解决方案:方案一://我的解决方案,自定义style然后找到对应的Activity进行设置<stylename=”Theme”parent=”android:Theme”><itemname=…

  • wsus补丁服务器如何给自己打补丁(windows补丁服务器)

    WSUS,全称Windowsserverupdateservices,是微软在其网络结构中提供的关于系统补丁更新的一个解决方案,完全免费,现在最新的版本是WSUS3.0SP2,在生产环境中部署WSUS的应用价值主要是提高网络资源的利用率,节省带宽,同时对于客户端计算机来说呢,更新效率也更高一些。在日常大家都习惯了用第三方工具给系统打补丁,局域网的PC数量少了便罢,如果多于50台,只是给系统以及微软产品打补丁这一项工作对于网络资源的占用就不可小觑,在Windowsserver2003以前…

  • SpringBoot线程池使用

    SpringBoot线程池使用一、线程池管理配置类@Configuration@EnableAsyncpublicclassExecutorConfig{privatestaticfinalLoggerlogger=LoggerFactory.getLogger(ExecutorConfig.class);@BeanpublicExecutorasyncTaskS…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号