记录在做python系统中使用到的Tkinter功能,下次寻找方便
(1) tkinter.Text.get(‘1.2’, END)这个函数,其中第一个参数‘1.2’是指从第一行第2列进行读取(‘1.0’表示第一行第一列,即第一个字符),第二个End表示最后一个字符
(1)设置字体:font=(‘楷体’,20)
(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('' , 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()
(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’
(1) cursor ,用在测试范围时再好不过了,使用一个“circle”参数就够了。鼠标到达Frame上面就变为圆型了。
(2)relief 指定边框样式
默认值是 “flat”
另外你还可以设置 “sunken”,“raised”,“groove” 或 “ridge”
注意,如果你要设置边框样式,记得设置 borderwidth 或 bd 选项不为 0,才能看到边框
(1)自适应大小包含内组件:frame.grid_propagate(0),false为自定义,True为自适应
(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的组件都会使组件变大一圈。所以,有带文字的标签或按钮需要提前预估好大小。
import pymysql
conn = pymysql.connect(
host= localhost, #服务器
port=3306,
user='famousCar', #服务器登录user
password='123123',
db='famousCar', #服务器数据库
charset='utf8',
)
nn = '123';np = '123'
cur = conn.cursor()
cur.execute('insert into login values (%s,%s);',[nn,np]) #字符串的语法和sql语句相似
conn.commit() #注意必须commit
cur.close() #使用完别忘了close
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))
# 在内存中创建一个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")
当鼠标滚轮滚动时触发(支持WIN和mac系统,Linux参考Button)。格式:*.bind(’’,fun)
2.检测除掉所有空白字符,是否还有字符:
elif len(''.join(name1.split())) == 0:
tk.messagebox.showerror('错误','请输入名称')
def is_all_chinese(self,strs):
for i in strs:
if not '\u4e00' <= i <= '\u9fa5':
return False
return True
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
tkinter.messagebox.showinfo('提示','人生苦短')
window = tk.Tk()
window.iconphoto(True, tk.PhotoImage(file='./image/icon.png'))
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)