重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、首先确认你电脑上的python是正常的,同时tkinter模块安装正常。如下面图中所示,输入python命令可以看到正常的命令行界面,然后执行导入命令:
创新互联公司是一家专注于成都网站制作、成都网站建设、外贸营销网站建设与策划设计,安定网站建设哪家好?创新互联公司做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:安定等地区。安定做网站价格咨询:13518219792
from tkinter import *
tkinter安装正常的话就不会报错,如下面图中所示:
2、确认无误后,打开python编辑器pycharm,然后新建一个文件,叫做tkinter_t.py。第一个测试内容如下面所示,下面我们来依次解释:
from tkinter import * #导入tkinter模块
Label(text='spam').pack() # 创建一个Label窗口,显示一行内容是spam
mainloop() #创建窗口循环。
3、内容编辑完毕,确认无误后,点击pycharm编辑器最上方的run选项卡。然后再点击下方的run选项,如下面图中所示:
4、然后会弹出一个窗口,让你选择需要运行的python文件,选择刚才创建的tkinter_t.py,然后就会开始执行。弹出我们的测试窗口。如下面第二张图中所示,到这里,我们第一步工作就完成了。
5、下面我们来继续在第一个的基础上进行优化。优化后的命令总共分两段,我们来依次讲解,先看第一段:
from tkinter import *
from tkinter.messagebox import showinfo
def reply(): showinfo(title='新窗口', message='另一个窗口')
第一个from刚才讲过了,第二个from是导入showinfo这个模块,用来创建一个新窗口,然后在下面定义一个新函数reply(),函数的作用就是创建一个新窗口。
6、然后我们再来看第二段代码:
windows = Tk(
button=Button(windows, text='press', command=reply
button.pack(
windows.mainloop()
首先用Tk()这个模块创建一个窗口windows,然后定义一个按钮button,按钮的名称是press,按下去以后的响应命令command是刚才定义的reply函数。
然后把button按钮打包
最后开始窗口循环。
7、代码确认无误后,点击pycharm页面右上角的tkinter_t.py文件名旁边的绿色三角按钮,开始运行代码。
、
8、如下面图中所示,刚创建的窗口是个很小的窗口,只显示了一个按钮的高度。我们将鼠标移动到这个窗口的边上,把它拉大成第二张图中所示:
9、然后按一下press按钮,如下面图中所示,函数reply响应以后,就创建了一个新窗口。完整代码如下:
from tkinter import *
from tkinter.messagebox import showinf
def reply()
showinfo(title='新窗口', message='另一个窗口')
windows = Tk(
button=Button(windows, text='press', command=reply
button.pack(
windows.mainloop()
采用的是main函数对主窗口运行程序完毕自动关闭的命令:
from tkinter import *def main():
root = Tk()
b = Button(root, text='退出', command=root.quit)
b.pack()
mainloop()if __name__ == '__main__':
main()
扩展资料:
main函数的应用:
程序执行的起点,main是相对来说的,如同音学理论之主调于泛音,泛音即程序中的除main之外的其他函数,迎合思考方式而生成的而非必定的模式。有主有次,执行起来条清缕析,既可将程序模块化又实现了一个闭合的整体。
模块化程序设计方法是把整个程序划分为若干功能较为单一的程序模块,然后分别予以实现,最后再把所有的程序模块像搭积木一样装配起来。
利用函数可以实现程序的模块化,可以大大地减轻编码工作量。在函数内部或复合语句块内部定义的 auto 类型变量称为局部变量。
局部变量的作用域从该局部变量定义的位置开始到本函数或复合语句结束处。局部变量的生存期较短暂。当局部变量所在的函数被调用时,局部变量内存空间被分配,函数调用结束后,局部变量内存空间被释放。
函数的形参和实参均属于局部变量,调用函数时,形参内存空间被分配。函数调用结束后,形参内存空间被释放。C语言函数参数传递可分为三种情况:简单变量作为函数参数、数组名作为函数参数以及指针作为函数参数。
参考资料来源:百度百科-main函数
有很多种方法,但是很多方法要么这个有问题,要么那个有问题,最后终于找到一种没问题的方法。记录一下:
Login.py(登录窗口)文件
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QFileDialog, QMessageBox, QDockWidget, QListWidget
from PyQt5.QtGui import *
from Ui_Login import Ui_Login_Window #由.UI文件生成.py文件后,导入创建的GUI类
from Main import * # Main.py为 主窗口代码文件
from class_MSSQL import MSSQL
#QtWidgets.QMainWindow:继承该类方法
class Login_window(QtWidgets.QMainWindow,Ui_Login_Window):
#__init__: 析构函数,也就是类被创建后就会预先加载的项目。
# 马上运行,这个方法可以用来对你的对象做一些你希望的初始化。
def __init__(self):
#这里需要重载一下Login_window,同时也包含了QtWidgets.QMainWindow的预加载项。
super(Login_window, self).__init__()
self.setupUi(self)
# 将点击事件与槽函数进行连接
self.btn_login.clicked.connect(self.btn_login_fuc)
#登录按钮 函数
def btn_login_fuc(self):
#1 获取输入的账户和密码
account = self.txt_1.text() # 记得text要打括号()!
password = self.txt_2.text()
if account == "" or password == "":
reply = QMessageBox.warning(self,"警告","账号密码不能为空,请输入!")
return
#2 查询数据库,判定是否有匹配
ms = MSSQL()
result = ms.Login_result(account, password)
if(len(result) 0):
#1打开新窗口
Ui_Main.show()#2关闭本窗口
self.close()
else:
reply = QMessageBox.warning(self,"警告","账户或密码错误,请重新输入!")
if __name__ == '__main__': #如果这个文件是主程序。
app = QtWidgets.QApplication(sys.argv) #QApplication相当于main函数,也就是整个程序(很多文件)的主入口函数。对于GUI程序必须至少有一个这样的实例来让程序运行。
window = Login_window() #生成一个实例(对象)
Ui_Main = Ui_Main() #生成主窗口的实例
window.show() #有了实例,就得让它显示。这里的show()是QWidget的方法,用来显示窗口。
sys.exit(app.exec_()) # 调用sys库的exit退出方法,条件是app.exec_()也就是整个窗口关闭。
Main.py(主窗口)文件
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from Ui_Main import Ui_MainWindow #由.UI文件生成.py文件后,导入创建的GUI类
import math
from PIL import Image, ImageDraw, ImageFont
import numpy as np
import os
import cv2 as cvcv
from class_Detection import Detection
class Ui_Main(QtWidgets.QMainWindow,Ui_MainWindow):
def __init__(self):
super(Ui_Main, self).__init__()
self.setupUi(self)
# 将点击事件与槽函数进行连接
self.btn_video.clicked.connect(self.btn_video_fuc)
def btn_video_fuc(self):
filename = QFileDialog.getOpenFileName(self,'open file','./')
self.timer_camera = QTimer(self)
self.cap = cvcv.cv2.VideoCapture(filename[0])
self.timer_camera.timeout.connect(self.show_pic)
self.timer_camera.start(10) #1毫秒
def show_pic(self):
dc = Detection()
success,frame = self.cap.read()
if success:
show = dc.process_image(frame)
showImage = QImage(show.data, show.shape[1], show.shape[0],QImage.Format_RGB888)
self.label.setPixmap(QPixmap.fromImage(showImage))
self.label.setScaledContents(True) #图片自适应
self.timer_camera.start(10)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = Ui_Main()
window.show()
sys.exit(app.exec_())