python实战GUI界面+mysql
前言
前面用tkinter做了一个巨丑的GUI界面,今天想把它变漂亮起来,重新找回page做了一个界面,它也是基于tkinter开发的所见即所得的界面编辑器,前面因为代码搞不明白没用上,现在重新研究一下。
一、打开page,软件自己在网上搜索下载的。它的界面挺有意思的,不是我们常见的形式,它分开了五个部分可以随便拖动,各部分间就是桌面,没有连在一起。
New Toplevel 就是工作台,可以将元件放置在上面。
Widget Toolbar 里就是可用的元件。
Attrbute Editor 编辑元件属性。
Widget Tree 元件导航树。
page手册:https://www.kancloud.cn/gnefnuy/python/1316391 (全网只找到这一个,谁还有其它资料的请留言,谢谢)
二、画好自己的界面,这下漂亮多了。
三、接下来导出python文件,这很重要,导出后就可以直接运行py文件生成界面。
1、选取菜单如截图
2、在弹出的页面点击‘save’,将这个GUI文件保存到你的project文件夹下。
3、选取菜单如截图
4、同样在弹出的页面点击‘save’,将这个文件保存到你的project文件夹下。(如果漏了这个文件,GUI运行就会报错)
5、现在试运行一下GUI的py文件。运行正常。
四、GUI做好,接下来要写逻辑了。
1、mysql的设置上一篇已经做过了,一些逻辑也可以照搬过来,现在主要的问题有两个。
一是原来的lisbox选择查找项改成了Combobox来做,要重新写代码。
二是原来所有东西都写在一个py上,现在出现了两个py文件(UI.py和UI_support.py),逻辑该写在哪,要研究一下。
2、combobox是从ttk引用的元件,不是tkinter上的,所以要记得import ttk(page生成的py文件已有)。
两个文件研究不出所以,先直接在UI.py上写Combobox的数据来源。
#从student表表头加载下拉列表
sql_sr = "SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'student'"
cbox_val = sql().select(sql_sr)
self.input_name = ttk.Combobox(top)
self.input_name.place(relx=0.192, rely=0.067, relheight=0.051
, relwidth=0.172)
self.input_name.configure(values = cbox_val) #设置下拉列表的值
self.input_name.configure(state='readonly') #设置为只读
self.input_name.configure(takefocus="")
下面还有一个插入时的Combobox,代码类似。
#加载下拉列表来源
sql_sr2 = "select class.name from class"
cbox_val2 = sql().select(sql_sr2) self.insert_class = ttk.Combobox(top)
self.insert_class.place(relx=0.6, rely=0.733, relheight=0.051
, relwidth=0.172)
self.insert_class.configure(values = cbox_val2)
self.insert_class.configure(textvariable=UI_support.combobox)
self.insert_class.configure(state='readonly') #设置为只读
self.insert_class.configure(takefocus="")
self.insert_class.configure(cursor="fleur")
结果:
修改:读了一下page手册,发现UI.py是尽量不动的(修改界面后再生成代码会覆盖掉修改内容),要写到UI_support.py,尝试将下拉列表初始化写入def init
def init(top, gui, *args, **kwargs):
global w, top_level, root
w = gui
top_level = top
root = top sql_sr = "SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'student'"
cbox_val = sql().select(sql_sr)
w.input_name.configure(values = cbox_val) #设置下拉列表的值
w.input_name.configure(state='readonly') #设置为只读 sql_sr2 = "select class.name from class"
cbox_val2 = sql().select(sql_sr2) w.insert_class.configure(values = cbox_val2)
w.insert_class.configure(state='readonly')
运行显示倒是正常的,但一选择值就出问题了,两个下拉列表值同时变了,得再找原因。
CSDN上找到这个说法:
再回头查看代码,在UI_support.py中作如下修改:
def set_Tk_var():
global combobox
combobox = tk.StringVar()
global combobox2 #增加一个数据源给第二个commbox引用
combobox2 = tk.StringVar()
在UI.py中修改第二个commbox元件的数据源
self.insert_class = ttk.Combobox(top)
self.insert_class.place(relx=0.6, rely=0.733, relheight=0.051
, relwidth=0.172)
self.insert_class.configure(textvariable=UI_support.combobox2)#修改数据源
self.insert_class.configure(takefocus="")
运行测试OK,不过存在一个问题就是还是修改了UI.py的代码,要是有界面调整,用page再生成代码会覆盖掉修改的地方,估计修改数据源可以直接从page下手修改,这个放到后面再研究吧。
3、接下来要写从下拉列表获取焦点值,以及‘查找’和‘新增’按钮的逻辑。目前点击这两个按钮发现调用的是UI_support.py里的函数,那么就应该去UI_support.py里去写这两个按钮的逻辑了,试试看。
先写“查找”按钮
def on_select():
w.show_list.delete(0,'end') #清空显示区原有信息
name = w.input_name.get() #获取下拉列表当前值
varlue = w.input_valuse.get()
sql_sr = "select * from Student where student." + name + "=" + "'" + varlue +"'"
result = sql().select(sql_sr)
for x in result:
w.show_list.insert('end',x)
sys.stdout.flush()
查找成功
再写“新增”按钮
def on_insert():
name = w.insert_name.get()
age = w.insert_age.get()
sex = w.insert_sex.get()
myclass = w.insert_class.get()
sql_sr = "INSERT INTO Student (name,age,sex,class) VALUES ('"+name+"',"+age+","+sex+",'"+myclass+"')"
print(sql_sr)
sql().insert(sql_sr)
sys.stdout.flush()
运行成功,新增一条记录
4、至此,这个小工具算是完成了,前后搞了一个多星期,碰到啥问题就去查找资料,编程小白没办法,不过做成了还是有些许窃喜的,最后贴上两个文件的最终代码。
UI.py
1 #! /usr/bin/env python
2 # -*- coding: utf-8 -*-
3 #
4 # GUI module generated by PAGE version 5.4
5 # in conjunction with Tcl version 8.6
6 # Nov 13, 2020 11:21:14 AM CST platform: Windows NT
7
8 import sys
9
10 try:
11 import Tkinter as tk
12 except ImportError:
13 import tkinter as tk
14
15 try:
16 import ttk
17 py3 = False
18 except ImportError:
19 import tkinter.ttk as ttk
20 py3 = True
21
22 import UI_support
23
24 def vp_start_gui():
25 '''Starting point when module is the main routine.'''
26 global val, w, root
27 root = tk.Tk()
28 UI_support.set_Tk_var()
29 top = database (root)
30 UI_support.init(root, top)
31 root.mainloop()
32
33 w = None
34 def create_database(rt, *args, **kwargs):
35 '''Starting point when module is imported by another module.
36 Correct form of call: 'create_database(root, *args, **kwargs)' .'''
37 global w, w_win, root
38 #rt = root
39 root = rt
40 w = tk.Toplevel (root)
41 UI_support.set_Tk_var()
42 top = database (w)
43 UI_support.init(w, top, *args, **kwargs)
44 return (w, top)
45
46 def destroy_database():
47 global w
48 w.destroy()
49 w = None
50
51 class database:
52 def __init__(self, top=None):
53 '''This class configures and populates the toplevel window.
54 top is the toplevel containing window.'''
55 _bgcolor = '#d9d9d9' # X11 color: 'gray85'
56 _fgcolor = '#000000' # X11 color: 'black'
57 _compcolor = '#d9d9d9' # X11 color: 'gray85'
58 _ana1color = '#d9d9d9' # X11 color: 'gray85'
59 _ana2color = '#ececec' # Closest X11 color: 'gray92'
60 self.style = ttk.Style()
61 if sys.platform == "win32":
62 self.style.theme_use('winnative')
63 self.style.configure('.',background=_bgcolor)
64 self.style.configure('.',foreground=_fgcolor)
65 self.style.configure('.',font="TkDefaultFont")
66 self.style.map('.',background=
67 [('selected', _compcolor), ('active',_ana2color)])
68
69 top.geometry("600x450+518+418")
70 top.minsize(120, 1)
71 top.maxsize(1924, 1061)
72 top.resizable(1, 1)
73 top.title("Database")
74 top.configure(background="#ffffff")
75 top.configure(highlightbackground="#d9d9d9")
76 top.configure(highlightcolor="black")
77
78 self.select_button = tk.Button(top)
79 self.select_button.place(relx=0.817, rely=0.06, height=28, width=55)
80 self.select_button.configure(activebackground="#ececec")
81 self.select_button.configure(activeforeground="#000000")
82 self.select_button.configure(background="#d9d9d9")
83 self.select_button.configure(command=UI_support.on_select)
84 self.select_button.configure(disabledforeground="#a3a3a3")
85 self.select_button.configure(foreground="#000000")
86 self.select_button.configure(highlightbackground="#d9d9d9")
87 self.select_button.configure(highlightcolor="black")
88 self.select_button.configure(pady="0")
89 self.select_button.configure(text='''查找''')
90
91 self.menubar = tk.Menu(top,font="TkMenuFont",bg=_bgcolor,fg=_fgcolor)
92 top.configure(menu = self.menubar)
93
94 self.input_valuse = tk.Entry(top)
95 self.input_valuse.place(relx=0.5, rely=0.067,height=27, relwidth=0.173)
96 self.input_valuse.configure(background="white")
97 self.input_valuse.configure(disabledforeground="#a3a3a3")
98 self.input_valuse.configure(font="TkFixedFont")
99 self.input_valuse.configure(foreground="#000000")
100 self.input_valuse.configure(highlightbackground="#d9d9d9")
101 self.input_valuse.configure(highlightcolor="black")
102 self.input_valuse.configure(insertbackground="black")
103 self.input_valuse.configure(selectbackground="blue")
104 self.input_valuse.configure(selectforeground="white")
105
106 self.Label1 = tk.Label(top)
107 self.Label1.place(relx=0.083, rely=0.067, height=23, width=54)
108 self.Label1.configure(activebackground="#f9f9f9")
109 self.Label1.configure(activeforeground="black")
110 self.Label1.configure(background="#d9d9d9")
111 self.Label1.configure(disabledforeground="#a3a3a3")
112 self.Label1.configure(foreground="#000000")
113 self.Label1.configure(highlightbackground="#d9d9d9")
114 self.Label1.configure(highlightcolor="black")
115 self.Label1.configure(text='''查找项:''')
116
117 self.Label2 = tk.Label(top)
118 self.Label2.place(relx=0.41, rely=0.067, height=23, width=42)
119 self.Label2.configure(activebackground="#f9f9f9")
120 self.Label2.configure(activeforeground="black")
121 self.Label2.configure(background="#d9d9d9")
122 self.Label2.configure(disabledforeground="#a3a3a3")
123 self.Label2.configure(foreground="#000000")
124 self.Label2.configure(highlightbackground="#d9d9d9")
125 self.Label2.configure(highlightcolor="black")
126 self.Label2.configure(text='''数值:''')
127
128 self.insert_button = tk.Button(top)
129 self.insert_button.place(relx=0.817, rely=0.844, height=28, width=55)
130 self.insert_button.configure(activebackground="#ececec")
131 self.insert_button.configure(activeforeground="#000000")
132 self.insert_button.configure(background="#d9d9d9")
133 self.insert_button.configure(command=UI_support.on_insert)
134 self.insert_button.configure(disabledforeground="#a3a3a3")
135 self.insert_button.configure(foreground="#000000")
136 self.insert_button.configure(highlightbackground="#d9d9d9")
137 self.insert_button.configure(highlightcolor="black")
138 self.insert_button.configure(pady="0")
139 self.insert_button.configure(text='''新增''')
140
141 self.input_name = ttk.Combobox(top)
142 self.input_name.place(relx=0.183, rely=0.067, relheight=0.051
143 , relwidth=0.172)
144 self.input_name.configure(textvariable=UI_support.combobox)
145 self.input_name.configure(takefocus="")
146 self.input_name.configure(cursor="X_cursor")
147
148 self.Label1_2 = tk.Label(top)
149 self.Label1_2.place(relx=0.083, rely=0.156, height=23, width=42)
150 self.Label1_2.configure(activebackground="#f9f9f9")
151 self.Label1_2.configure(activeforeground="black")
152 self.Label1_2.configure(background="#d9d9d9")
153 self.Label1_2.configure(disabledforeground="#a3a3a3")
154 self.Label1_2.configure(foreground="#000000")
155 self.Label1_2.configure(highlightbackground="#d9d9d9")
156 self.Label1_2.configure(highlightcolor="black")
157 self.Label1_2.configure(text='''结果:''')
158
159 self.show_list = tk.Listbox(top)
160 self.show_list.place(relx=0.083, rely=0.2, relheight=0.267
161 , relwidth=0.823)
162 self.show_list.configure(background="white")
163 self.show_list.configure(disabledforeground="#a3a3a3")
164 self.show_list.configure(font="TkFixedFont")
165 self.show_list.configure(foreground="#000000")
166 self.show_list.configure(highlightbackground="#d9d9d9")
167 self.show_list.configure(highlightcolor="black")
168 self.show_list.configure(selectbackground="blue")
169 self.show_list.configure(selectforeground="white")
170
171 self.Label1_3 = tk.Label(top)
172 self.Label1_3.place(relx=0.09, rely=0.518, height=23, width=64)
173 self.Label1_3.configure(activebackground="#f9f9f9")
174 self.Label1_3.configure(activeforeground="black")
175 self.Label1_3.configure(background="#d9d9d9")
176 self.Label1_3.configure(disabledforeground="#a3a3a3")
177 self.Label1_3.configure(foreground="#000000")
178 self.Label1_3.configure(highlightbackground="#d9d9d9")
179 self.Label1_3.configure(highlightcolor="black")
180 self.Label1_3.configure(text='''新增数据:''')
181
182 self.Label1_4 = tk.Label(top)
183 self.Label1_4.place(relx=0.1, rely=0.622, height=23, width=54)
184 self.Label1_4.configure(activebackground="#f9f9f9")
185 self.Label1_4.configure(activeforeground="black")
186 self.Label1_4.configure(background="#d9d9d9")
187 self.Label1_4.configure(disabledforeground="#a3a3a3")
188 self.Label1_4.configure(foreground="#000000")
189 self.Label1_4.configure(highlightbackground="#d9d9d9")
190 self.Label1_4.configure(highlightcolor="black")
191 self.Label1_4.configure(text='''姓名:''')
192
193 self.Label1_5 = tk.Label(top)
194 self.Label1_5.place(relx=0.467, rely=0.622, height=23, width=54)
195 self.Label1_5.configure(activebackground="#f9f9f9")
196 self.Label1_5.configure(activeforeground="black")
197 self.Label1_5.configure(background="#d9d9d9")
198 self.Label1_5.configure(disabledforeground="#a3a3a3")
199 self.Label1_5.configure(foreground="#000000")
200 self.Label1_5.configure(highlightbackground="#d9d9d9")
201 self.Label1_5.configure(highlightcolor="black")
202 self.Label1_5.configure(text='''年龄:''')
203
204 self.Label1_6 = tk.Label(top)
205 self.Label1_6.place(relx=0.1, rely=0.733, height=23, width=54)
206 self.Label1_6.configure(activebackground="#f9f9f9")
207 self.Label1_6.configure(activeforeground="black")
208 self.Label1_6.configure(background="#d9d9d9")
209 self.Label1_6.configure(disabledforeground="#a3a3a3")
210 self.Label1_6.configure(foreground="#000000")
211 self.Label1_6.configure(highlightbackground="#d9d9d9")
212 self.Label1_6.configure(highlightcolor="black")
213 self.Label1_6.configure(text='''性别:''')
214
215 self.Label1_7 = tk.Label(top)
216 self.Label1_7.place(relx=0.467, rely=0.738, height=23, width=54)
217 self.Label1_7.configure(activebackground="#f9f9f9")
218 self.Label1_7.configure(activeforeground="black")
219 self.Label1_7.configure(background="#d9d9d9")
220 self.Label1_7.configure(disabledforeground="#a3a3a3")
221 self.Label1_7.configure(foreground="#000000")
222 self.Label1_7.configure(highlightbackground="#d9d9d9")
223 self.Label1_7.configure(highlightcolor="black")
224 self.Label1_7.configure(text='''班级:''')
225
226 self.insert_name = tk.Entry(top)
227 self.insert_name.place(relx=0.233, rely=0.622, height=27, relwidth=0.173)
228
229 self.insert_name.configure(background="white")
230 self.insert_name.configure(disabledforeground="#a3a3a3")
231 self.insert_name.configure(font="TkFixedFont")
232 self.insert_name.configure(foreground="#000000")
233 self.insert_name.configure(highlightbackground="#d9d9d9")
234 self.insert_name.configure(highlightcolor="black")
235 self.insert_name.configure(insertbackground="black")
236 self.insert_name.configure(selectbackground="blue")
237 self.insert_name.configure(selectforeground="white")
238
239 self.insert_age = tk.Entry(top)
240 self.insert_age.place(relx=0.6, rely=0.622,height=27, relwidth=0.173)
241 self.insert_age.configure(background="white")
242 self.insert_age.configure(disabledforeground="#a3a3a3")
243 self.insert_age.configure(font="TkFixedFont")
244 self.insert_age.configure(foreground="#000000")
245 self.insert_age.configure(highlightbackground="#d9d9d9")
246 self.insert_age.configure(highlightcolor="black")
247 self.insert_age.configure(insertbackground="black")
248 self.insert_age.configure(selectbackground="blue")
249 self.insert_age.configure(selectforeground="white")
250
251 self.insert_sex = tk.Entry(top)
252 self.insert_sex.place(relx=0.233, rely=0.733,height=27, relwidth=0.173)
253 self.insert_sex.configure(background="white")
254 self.insert_sex.configure(disabledforeground="#a3a3a3")
255 self.insert_sex.configure(font="TkFixedFont")
256 self.insert_sex.configure(foreground="#000000")
257 self.insert_sex.configure(highlightbackground="#d9d9d9")
258 self.insert_sex.configure(highlightcolor="black")
259 self.insert_sex.configure(insertbackground="black")
260 self.insert_sex.configure(selectbackground="blue")
261 self.insert_sex.configure(selectforeground="white")
262
263 self.insert_class = ttk.Combobox(top)
264 self.insert_class.place(relx=0.6, rely=0.733, relheight=0.051
265 , relwidth=0.172)
266 self.insert_class.configure(textvariable=UI_support.combobox2)#修改数据源
267 self.insert_class.configure(takefocus="")
268
269 if __name__ == '__main__':
270 vp_start_gui()
UI_support.py
1 #! /usr/bin/env python
2 # -*- coding: utf-8 -*-
3 #
4 # Support module generated by PAGE version 5.4
5 # in conjunction with Tcl version 8.6
6 # Oct 20, 2020 09:35:42 AM CST platform: Windows NT
7 # Nov 03, 2020 05:18:17 PM CST platform: Windows NT
8 # Nov 03, 2020 05:19:47 PM CST platform: Windows NT
9
10 import sys
11
12 try:
13 import Tkinter as tk
14 except ImportError:
15 import tkinter as tk
16
17 try:
18 import ttk
19 py3 = False
20 except ImportError:
21 import tkinter.ttk as ttk
22 py3 = True
23
24 import mysql.connector
25 class sql:
26 def __init__(self):
27 self.con = mysql.connector.connect(
28 host="localhost", # 数据库主机地址
29 user="root", # 数据库用户名
30 passwd="123456", # 数据库密码
31 database="test" #数据库名称
32 )
33 self.cursor = self.con.cursor()
34
35 def select(self,sql_sr): #类定义了init后下面的函数第一参数必须是self否则引用报错
36 self.cursor.execute(sql_sr)
37 result = self.cursor.fetchall()
38 return result
39
40 def insert(self,sql_sr):
41 self.cursor.execute(sql_sr)
42 self.con.commit()
43 print(self.cursor.rowcunt,'新增成功')
44
45 def set_Tk_var():
46 global combobox
47 combobox = tk.StringVar()
48 global combobox2 #增加一个数据源给第二个commbox引用
49 combobox2 = tk.StringVar()
50 global selectedButton
51 selectedButton = tk.IntVar()
52
53 def init(top, gui, *args, **kwargs):
54 global w, top_level, root
55 w = gui
56 top_level = top
57 root = top
58
59 sql_sr = "SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'student'"
60 cbox_val = sql().select(sql_sr)
61 w.input_name.configure(values = cbox_val) #设置下拉列表的值,前面定义w是引用UI.py的意思
62 w.input_name.configure(state='readonly') #设置为只读
63
64 sql_sr2 = "select class.name from class"
65 cbox_val2 = sql().select(sql_sr2)
66
67 w.insert_class.configure(values = cbox_val2)
68 w.insert_class.configure(state='readonly')
69
70 def on_select():
71 w.show_list.delete(0,'end') #清空显示区原有信息
72 name = w.input_name.get() #获取下拉列表当前值
73 varlue = w.input_valuse.get()
74 sql_sr = "select * from Student where student." + name + "=" + "'" + varlue +"'"
75 result = sql().select(sql_sr)
76 for x in result:
77 w.show_list.insert('end',x)
78 sys.stdout.flush()
79
80 def on_insert():
81 name = w.insert_name.get()
82 age = w.insert_age.get()
83 sex = w.insert_sex.get()
84 myclass = w.insert_class.get()
85 sql_sr = "INSERT INTO Student (name,age,sex,class) VALUES ('"+name+"',"+age+","+sex+",'"+myclass+"')"
86 print(sql_sr)
87 sql().insert(sql_sr)
88 sys.stdout.flush()
89
90 def destroy_window():
91 # Function which closes the window.
92 global top_level
93 top_level.destroy()
94 top_level = None
95
96 if __name__ == '__main__':
97 import UI
98 UI.vp_start_gui()
python实战GUI界面+mysql的更多相关文章
- 简单的Python GUI界面框架
Python开发GUI界面, 可以使用pyQT或者wxpython. 不过不论pyQT还是wxpython都需要比较多的学习成本.Python工程往往是用于快速开发的,有些时候引入pyQT,wxpyt ...
- Python开发GUI工具介绍,实战:将图片转化为素描画!【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- Python开发GUI工具介绍,实战:将图片转化为素描画!
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- Python开发GUI实战:图片转换素描画工具!
奋斗没有终点 好好学习72变,因为将来 没有人能替你阻挡81难 . 生如蝼蚁,当有鸿鹄之志: 命如纸薄,应有不屈之心 . 今天被这句话触动了,所以开篇分享给大家.鸡汤有毒,但有时大家却靠它激励自己 ...
- python实现的、带GUI界面电影票房数据可视化程序
代码地址如下:http://www.demodashi.com/demo/14588.html 详细说明: Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从数据采 ...
- Python 实现的、带GUI界面的词云生成器
代码地址如下:http://www.demodashi.com/demo/14233.html 详细说明: "词云"就是数据可视化的一种形式,给出一段文本,根据文本中词语的出现频率 ...
- python爬虫练习 -- 签名器+GUI界面(Tkinter)
效果图: 实现步骤如下: 实现原理:其实就是套了一层GUI的壳,主要还是爬虫抓取某个网站返回的数据,然后利用python自带的GUI工具包Tkinter来实现gui界面: 1.爬虫分析: 目标站点:h ...
- [实战]MVC5+EF6+MySql企业网盘实战(5)——登录界面,头像等比例压缩
写在前面 关于该项目,已经很久没更新了.实在是找不到一个好的ui,没办法就在网上找了一个还不错的,就凑合着先用着吧,先出第一版,以后的再想着去优化.最近更新与网盘项目相关的内容是准备在项目中使用一个美 ...
- 用Python语言设计GUI界面
我们大家都编写过程序,但是如果能够设计一个GUI界面,会使程序增添一个很大的亮点!今天就让我们来用目前十分流行的python语言写出一个最基本的GUI,为日后设计更加漂亮的GUI打下基础. 工具/原料 ...
随机推荐
- docker 启动redis/nginx
1.docker 启动redis # redis docker run -itd --name redis-test -p 16379:6379 redis 2.docker 启动nginx ...
- openresty上安装waf
一,查看openresty的当前版本 [root@localhost luacache]# /usr/local/openresty/bin/openresty -V nginx version: o ...
- sql优化整理(一)
sql的编写语法是这样的: SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN < ...
- maven 是什么
- eclipse之SSH配置spring【二】
第一篇中配置struts完成(http://www.cnblogs.com/dev2007/p/6475074.html),在此基础上,继续配置spring. web.xml中增加listener,依 ...
- 【转】Loading PNGs with SDL_image
FROM:http://lazyfoo.net/tutorials/SDL/06_extension_libraries_and_loading_other_image_formats/index2. ...
- WebService安全机制的思考与实践
近来因业务需要,需要研究webservice,于是便有这篇文章:SpringBoot整合Apache-CXF实践 一.WebService是什么? WebService是一个平台独立的.低耦合的.自包 ...
- model基础操作(下)
3.Django多对多表结构操作 3.1 第一种: ManyToManyField 自己不创建第三张关系表,有m2m字段: 根据queryset对象增删改查(推荐) from django ...
- python爬虫使用xpath解析页面和提取数据
XPath解析页面和提取数据 一.简介 关注公众号"轻松学编程"了解更多. XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言.X ...
- [LuoguP1005]矩阵取数游戏 (DP+高精度)
题面 传送门:https://www.luogu.org/problemnew/show/P1005 Solution 我们可以先考虑贪心 我们每一次都选左右两边尽可能小的数,方便大的放在后面 听起来 ...