按照QT的API封装的Tkinter

欢迎

用了蛮久的QT,突然需要使用python,哇,是真的不顺手,很难受,用的,pyqt装起来太大了,本来用python也是为了轻便嘛,唉
只能自己动手封装一个

  • 公有:
  1. move
  2. resize
  3. setGeometry
  4. setText
  5. setFont
  6. hide
  7. show
  8. setClick
  9. setDbClick
  10. setEnable
  • Lab==QLabel:
  1. setImg == setPixmap scaled
  2. setAutoImg == Qt::KeepAspectRatio
  • Text==QLineEdit:
  1. setText
  2. getText == text
  • Table == QTableWidget
    其实就不像了,QT有QList,有QTableWidgetItem,但TK不需要呀,可以更简化,但是功能也做不到那么好了

调用的代码,做的一个登陆

以下为代码.

from Widget import *

class Login(Widget):
    def __init__(self):
        super(Login, self).__init__(500, 350, "登录")

    def initUI(self):
        title = Lab(self.root, "登录", 0, 0, 500, 50)
        title.setFont(("黑体", 36))
        uidLab = Lab(self.root, '用户名:', 50, 130, 100)
        pwdLab = Lab(self.root, "登录密码:", 50, 230, 100)

        imgLab = Lab(self.root, '', 10, 10, 100, 100)
        imgLab.setAutoImg("C:/Users/DELL/Pictures/main.ico")

        self.uid = Text(self.root, 175, 130, 275)
        self.pwd = Text(self.root, 175, 230, 275)

        self.login = Btn(self.root, "登录", 175, 300, 150, 40, self.password)

    def password(self):
        uid = self.uid.getText()
        pwd = self.pwd.getText()
        if uid == '' or pwd == '':
            return
        print(uid, pwd)


if __name__ == '__main__':
    login = Login()
    login.start()

在这里插入图片描述

封装的代码,只有几个控件,Widget,Button,Label,Entry,Treeview

以下为代码.

from tkinter.ttk import Button, Label, Entry, Treeview
from tkinter import Tk, GROOVE, StringVar
import os
from PIL import Image, ImageTk
from tkinter import messagebox

class Widget():
    def __init__(self, w=1000, h=500, title='系统', x=None, y=None):
        self.root = Tk()
        if x == None:
            self.resize(w, h)
        else:
            self.setGeometry(x, y, w, h)
        self.root.title(title)
        self.initUI()

    def close(self):
        self.root.destroy()

    def __del__(self):
        pass

    def hide(self):
        self.root.withdraw()

    def show(self):
        self.root.update()
        self.root.deiconify()

    def start(self):
        self.root.mainloop()

    def initUI(self):
        pass

    def setTitle(self, title):
        self.root.title(title)

    def resize(self, w, h):
        self.width = w
        self.height = h
        self.root.geometry(str(w)+'x'+str(h))

    def setGeometry(self, x, y, w, h):
        self.width = w
        self.height = h
        self.root.geometry(str(w)+'x'+str(h)+'+'+str(x)+"+"+str(y))

    def move(self, x, y):
        self.root.geometry(str(self.width) + 'x' +
                           str(self.height) + '+' + str(x) + "+" + str(y))

class uiModel():
    width = 0
    height = 0

    def move(self, x, y):
        self.place(x=x, y=y)

    def resize(self, w, h):
        self.width = w
        self.height = h
        self.place(width=w, height=h)

    def setGeometry(self, x, y, w, h):
        self.width = w
        self.height = h
        self.place(x=x, y=y, width=w, height=h)

    def setText(self, text):
        self.configure(text=text)

    def setFont(self, font=("黑体", 12)):
        self.configure(font=font)

    def hide(self):
        self.root.withdraw()

    def show(self):
        self.root.update()
        self.root.deiconify()

    def setClick(self, func, mouse=1):
        self.bind('<Double-Button-'+str(mouse)+'>', func)

    def setDbClick(self, func, mouse=1):
        self.bind('<Double-Button-'+str(mouse)+'>', func)

    def setEnable(self, state):
        if state:
            self.configure(state='normal')
        else:
            self.configure(state='disabled')
        # __init__(self,root,text='Button',x=0,y=0,w=100,h=40,command=None):

class Btn(Button, uiModel):
    def __init__(self, root, text='Button', x=0, y=0, w=100, h=40, command=None):
        super(Btn, self).__init__(root, text=text, command=command)
        self.setGeometry(x, y, w, h)
        # __init__(self,root,text=None,x=0,y=40,w=100,h=40):

class Lab(Label, uiModel):
    def __init__(self, root, text, x=0, y=40, w=100, h=40):
        super(Lab, self).__init__(root, text=text, img=None, anchor='center')
        self.setGeometry(x, y, w, h)

    def setImg(self, path=None):
        if path == None:
            self.configure(image=None)
            self.img = None
            return
        pil_image = Image.open(path)
        pil_image = pil_image.resize((self.width, self.height), Image.ANTIALIAS)
        img = ImageTk.PhotoImage(pil_image)
        self.configure(image=img)
        self.img = img

    def setAutoImg(self, path):
        if path == None:
            self.configure(image=None)
            self.img = None
            return
        pil_image = Image.open(path)
        w = pil_image.size[0]
        h = pil_image.size[1]
        if w / self.width < h / self.height:
            w = int(w * (self.height / h))
            h = self.height
        else:
            h = int(h * (self.width / w))
            w = self.width
        pil_image = pil_image.resize((w, h), Image.ANTIALIAS)
        img = ImageTk.PhotoImage(pil_image)
        self.configure(image=img)
        self.img = img

class Text(Entry, uiModel):
    def __init__(self, root, x=0, y=80, w=100, h=40, text=None):
        self.__text = StringVar()
        if text != None:
            self.setText(text)
        super(Text, self).__init__(root, textvariable=self.__text)
        self.setGeometry(x, y, w, h)

    def setText(self, text):
        self.__text.set(text)

    def getText(self):
        return self.__text.get()

class Table(Treeview, uiModel):
    def __init__(self, root, x=50, y=120, w=400, h=80, columns=2, headText=['1', '2']):
        self.col = columns
        cs = []
        for i in range(0, columns):
            cs.append(str(i+1))
        super(Table, self).__init__(root, show='headings', columns=cs)

        for i in range(0, columns):
            self.column(str(i+1), anchor='center')
            self.setHeadText(i, headText[i])
        self.setGeometry(x, y, w, h)

    def setHeadText(self, col, text):
        self.heading(str(col + 1), text=text)

    def setHeadTexts(self, texts):
        for i in range(0, len(texts)):
            self.setHeadText(i, texts[i])

    def setWidth(self, col, width):
        self.column(str(col + 1), width=width)

    def setWidths(self, widths):
        for i in range(0, len(widths)):
            self.setWidth(i, widths[i])

    def getData(self):
        for item in self.selection():
            item_text = self.item(item, "values")
        data = []
        for i in range(0, self.col):
            data.append(item_text[i])
        return data
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

向娇葵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值