python GUI(tkinter)

序言

记录在做python系统中使用到的Tkinter功能,下次寻找方便

Text、Entry

属性

(1) tkinter.Text.get(‘1.2’, END)这个函数,其中第一个参数‘1.2’是指从第一行第2列进行读取(‘1.0’表示第一行第一列,即第一个字符),第二个End表示最后一个字符

Button

属性

(1)设置字体:font=(‘楷体’,20)

Listbox

功能

(1)用‘’鼠标左键‘’事件绑定listbox的对象,可以实现返回listbox内容的下标。代码如下。

from tkinter import *

class make_list():
    def __init__(self,master):
        frame = Frame(master)
        frame.pack()

        self.list1 = None
        self.build_main_window(frame)
        self.list1.bind('<Button-1>', self.click_button)

    def click_button(self, event):
        self.curIndex = event.widget.nearest(event.y)
        print(self.curIndex)

    #display the window, calls the listbox
    def build_main_window(self, frame):
        self.build_listbox(frame)

    #listbox
    def build_listbox(self, frame):
        self.list1 = Listbox(frame)
        for item in ["one", "two", "three", "four"]:
            self.list1.insert(END, item)
        self.list1.insert(END, "a list entry")
        self.list1.pack()

if __name__ == '__main__':
    tk = Tk()
    make_list(tk)
    tk.mainloop()

Label

属性

(1)长,宽 :width,height
(2)对齐方式:justify,可选值有:LEFT,RIGHT,CENTER,默认为 CENTER。
(3)设置文本为多行显示:wraplength,默认为0。说明:数值为像素。
(4)对齐anchor,感觉比justify好用。可选参数为:‘n, ne, e, se, s, sw, w, nw, or center’

Frame

属性

(1) cursor ,用在测试范围时再好不过了,使用一个“circle”参数就够了。鼠标到达Frame上面就变为圆型了。
(2)relief 指定边框样式
默认值是 “flat”
另外你还可以设置 “sunken”,“raised”,“groove” 或 “ridge”
注意,如果你要设置边框样式,记得设置 borderwidth 或 bd 选项不为 0,才能看到边框

功能

(1)自适应大小包含内组件:frame.grid_propagate(0),false为自定义,True为自适应

grid布局

属性

(1) row=x,column=y:将控件放在x行,y列的位置。
(2) columnspan: 设置单元格横向跨越的列数,即控件占据的列数(宽度); rowspan:设置单元格纵向跨越的行数,即控件占据的行数(高度)。
(3) ipadx:设置控件里面水平方向空白区域大小; ipady:设置控件里面垂直方向空白区域大小;
padx:设置控件周围水平方向空白区域保留大小; pady:设置控件周围垂直方向空白区域保留大小;
(4) sticky:默认的控件在窗口中的对齐方式是居中。可以使用sticky选项去指定对齐方式,可以选择的值有:N/S/E/W

功能

(1) 在框体内分布权重:具体体验一下下面的代码,如果你使用grid()布局,一定要试试,你应该会用到:

from tkinter import *

root = Tk()
root.geometry("600x400")
#设置顶级窗体的行列权重,否则子组件的拉伸不会填充整个窗体
root.rowconfigure(0,weight=1)
root.columnconfigure(0,weight=1)

frame = Frame(root,cursor = "Circle")
frame.grid(row=0,column=0,sticky=N+S+W+E)
#分配权重
frame.rowconfigure(0,weight = 1);frame.rowconfigure(1,weight = 8);frame.rowconfigure(2,weight = 1)
frame.columnconfigure(0,weight = 5);frame.columnconfigure(1,weight = 1)
labelr = Label(frame,bg="red")
labelg = Label(frame,bg = "gray")
labelb = Label(frame,bg = "blue")
labely = Label(frame,bg= "yellow")

labelr.grid(row = 0,column = 0,columnspan = 2,sticky=N+S+W+E)
labelg.grid(row = 1,column = 0,sticky=N+S+W+E)
labelb.grid(row = 1,column = 1,rowspan = 2,sticky=N+S+W+E)
labely.grid(row = 2,column = 0,sticky=N+E+W+S)
mainloop()

(2)需要注意到的是,所有带text的组件都会使组件变大一圈。所以,有带文字的标签或按钮需要提前预估好大小。

mysql使用操作

  1. 导入库
import pymysql
  1. 连接数据库
conn = pymysql.connect(
    host= localhost,   #服务器
    port=3306,
    user='famousCar',   #服务器登录user 
    password='123123',
    db='famousCar',     #服务器数据库
    charset='utf8',
)
  1. 往数据库中添加数据
nn = '123';np = '123'
cur = conn.cursor()
cur.execute('insert into login values (%s,%s);',[nn,np])	#字符串的语法和sql语句相似
conn.commit()			#注意必须commit
cur.close()				#使用完别忘了close

xlsx文件操作

  1. xlsx文件导入
    需要导入两个模块
from openpyxl import Workbook,load_workbook
#打开excel
    wb = load_workbook('info.xlsx')
    sh = wb['Sheet']
    global count_Num,Max_Num,all_data
    for i in sh.values:
        count_Num += 1
        Max_Num += 1
        all_data.append(list(i))
  1. xlsx文件导出
	# 在内存中创建一个workbook对象,而且会至少创建一个 worksheet
        wb = Workbook()
        #获取当前活跃的worksheet,默认就是第一个worksheet
        ws = wb.active
        for row in range(1,len(all_data)+1):
            for col in range (1,8):
                if(col == 1):
                    ws.cell(row = row,column = col).value = row
                elif col == 3:
                    ws.cell(row = row,column = col).value = float(all_data[row-1][col-1])
                else:
                    ws.cell(row = row,column = col).value = all_data[row-1][col-1]
        #保存
        wb.save(filename="./info.xlsx")

其他

1. 鼠标绑定事件< MouseWheel >

当鼠标滚轮滚动时触发(支持WIN和mac系统,Linux参考Button)。格式:*.bind(’’,fun)
2.检测除掉所有空白字符,是否还有字符:

elif len(''.join(name1.split())) == 0:
	tk.messagebox.showerror('错误','请输入名称')

3.检测是否为全中文:

def is_all_chinese(self,strs):
     for i in strs:
         if not '\u4e00' <= i <= '\u9fa5':
             return False
     return True

4.检测是否为正整数或浮点数

	def is_number(num):
        s = str(num)
        if s.count('.') == 1:  # 小数
            new_s = s.split('.')
            left_num = new_s[0]
            right_num = new_s[1]
            if right_num.isdigit():
                if left_num.isdigit():
                    return True
        elif s.count(".") == 0:  # 整数
            if s.isdigit():
                return True
        return False

5.添加提示框

tkinter.messagebox.showinfo('提示','人生苦短')

6.设置png图片为窗口图标

window = tk.Tk()
window.iconphoto(True, tk.PhotoImage(file='./image/icon.png'))

7.设置窗口大小、居中并不可调节大小

def set_win_center(root, curWidth, curHight):
    '''
    设置窗口大小,并居中显示
    :param root:主窗体实例
    :return:无
    '''
    # 获取屏幕宽度和高度
    scn_w, scn_h = root.maxsize()

    # 计算中心坐标
    cen_x = (scn_w - curWidth) / 2
    cen_y = (scn_h - curHight) / 2

    # 设置窗口初始大小和位置
    size_xy = '%dx%d+%d+%d' % (curWidth, curHight, cen_x, cen_y)
    
    root.resizable(0,0)								#设置大小不可调节
    root.geometry(size_xy)

总结

当前实现,还在继续:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44223946/article/details/110352473
今日推荐