pyqt5弹出窗口(pyqt5关闭子窗口)
用的pyqt5,想实现点按钮打开新窗口 【总是报错,实在不知道这个BUG怎么调了,求大佬帮助】
qt 点击按钮调用另一个窗口后,新窗口按钮自定义槽函数不执行,...
主窗口按钮的槽函数,点击调用
void Ui_initface::set_clicked()
{
Ui_Dialog udialog;
udialog.setupUi(dialog);
dialog-show();
}
新窗口的槽函数
void Ui_Dialog::save_conf()
{
char s_c[11];
int s_i[8];
memset(s_i,0,8);
QString pstr;
s_i[0]=spinBox0-value();
printf("%d\n",s_i[0]);
s_i[1]=spinBox0_2-value();
pstr=lineEdit_ag-text();
const char *c_pstr = pstr.toLatin1().data();
//printf("%s\n",c_pstr);
strcpy(s_c,c_pstr);
s_i[4]=radioButton_ag1-isChecked();
s_i[5]=radioButton_ag01-isChecked();
s_i[2]=radioButton_a1-isChecked ();
s_i[3]=radioButton_01-isChecked ();
s_i[6]=radioButton_ab1-isChecked ();
s_i[7]=radioButton_ab01-isChecked ();
printf("%d\n",s_i[1]);
printf("%d\n",s_i[2]);
printf("%d\n",s_i[3]);
printf("%d\n",s_i[4]);
printf("%d\n",s_i[5]);
printf("%d\n",s_i[6]);
printf("%d\n",s_i[7]);
Write_Config(s_i,s_c);
emit CloseDialog();
}
如何在Pycharm中运用PyQT5创建Windows窗体
我们在Pycharm中可以运用PyQt5创建很多的Windows功能,那么如何创建Windows窗体呢?下面我给大家分享一下。
工具/材料
Pycharm
01
首先点击桌面左下角的开始菜单,在弹出的界面中选择cmd.exe选项,如下图所示
02
接下来在弹出的界面中输入pip install pyqt5命令进行pyqt5的安装,如下图所示
03
然后我们打开Pycharm软件,新建一个PyQT5的项目,如下图所示
04
接下来在GUITuts文件夹下面新建一个py文件,如下图所示,文件名称大家可以随便起,不要用中文
05
然后打开py文件,用import关键字导入PyQT5所需要的包,如下图所示
06
接下来声明一个窗体对象,同时定义窗体的名称和宽高的属性值,如下图所示
07
然后就需要对窗体进行初始化,初始化的时候主要是运用setWindowTitle和setGeometry两个方法设置
08
最后运行程序以后我们就可以看到如下图所示的窗体了,如果还需要在里面加内容就继续往窗体里塞即可
pyqt qwiget怎样启动另一个窗体
一、Pyqt5
创建第一个窗体
很多人写窗体程序都是直接敲代码,不使用设计器,我个人不是很赞成这种做法。使用设计器的好处是直观、维护方便,尤其开发复杂窗体的效率高。
但是每次修改ui文件后,需要重新生成py文件,会将原来的内容覆盖掉,为了避免这种情况,引入了一个中间类。主要步骤如下:
1使用QtDesigner创建一个简单的对话框,保存成simpleDialog.ui。
2使用cmd,进入simpleDialog.ui文件所在的目录,运行命令pyuic5
simpleDialog.ui
ui_simpleDialog.py
3打开ui_simpleDialog.py,pyqt自动生成的代码如下(无需任何修改):
from
PyQt5
import
QtCore,
QtGui,
QtWidgets
class
Ui_Form(object):#注意pyqt5窗体从object继承,不是QMainWindow了
def
setupUi(self,
Form):
Form.setObjectName("Form")
Form.resize(400,
300)
self.pushButton
=
QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(60,
70,
241,
131))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Form)
self.pushButton.clicked.connect(Form.close)
QtCore.QMetaObject.connectSlotsByName(Form)
def
retranslateUi(self,
Form):
_translate
=
QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form",
"Form"))
self.pushButton.setText(_translate("Form",
"PushButton"))
可以看到刚才新建的对话框的类名称是”Ui_Form”。
4新建一个simpleDialog.py文件,编写代码如下:
from
PyQt5
import
QtCore,
QtGui,
QtWidgets
from
ui_simpledialog
import
Ui_Form
import
sys
class
SimpleDialogForm(Ui_Form):#从自动生成的界面类继承
def
__init__(self,
parent
=
None):
super(SimpleDialogForm,
self).__init__()
def
yourFunctions(self):
Pass
#这个类中处理你自己的业务逻辑。界面ui可随心所欲的修改,不影响你已经编写的逻辑。
自定义一个类(SimpleDialogForm)继承自pyqt自动生成的类,然后覆写”构造函数”,剩余的工作就是你自己想要添加的功能了。
5完善运行测试代码,如下:
if
__name__
==
"__main__":
app
=
QtWidgets.QApplication(sys.argv)
main
=
QtWidgets.QMainWindow()#创建一个主窗体(必须要有一个主窗体)
content
=
SimpleDialogForm()#创建对话框
content.setupUi(main)#将对话框依附于主窗体
main.show()#主窗体显示
sys.exit(app.exec_())
6为什么要这么做?
基于界面与实现分离的原则,我们使用QtDesigner设计的窗体,仅仅作为界面使用,具体业务逻辑通过单独的文件实现,这样以后如果界面发生变动,pyqt自动生成窗体代码时不会覆盖掉我们已经编写的业务逻辑。
7推荐的做法:
为了有良好的封装性,将中间类修改为:
class
SimpleDialogForm(Ui_Form,
QtWidgets.QMainWindow):
def
__init__(self,
parent
=
None):
super(SimpleDialogForm,
self).__init__()
self.setupUi(self)#在此设置界面
#在此,可添加自定义的信号绑定
self.pushButton.clicked.connect(self.openFile)
self.pushButton_2.clicked.connect(self.closeApp)
测试代码这样写:
if
__name__
==
"__main__":
app
=
QtWidgets.QApplication(sys.argv)
main
=
SimpleDialogForm()
main.show()#在外面只需要调用simpleDialogForm显示就行,不需要关注内部如何实现了。
sys.exit(app.exec_())
PyQt5 窗体控件自适应窗口变化
1. 新建一个Form窗体
2. 放入需要的控件
3. 右键该主窗体区域,弹出对话框如下,选择Lay Out in a Grid或者Lay Out in a Form Layout。
Lay Out in a Grid:即格栅式,每行都可插入多个控件,控件默认居中布局。
Lay Out in a Form Layout:每行可插入两个控件,控件默认居左布局。(尝试了很多次发现一行无法平放3个控件)
其他:
Lay Out Horizontally : 纵向布局
Lay Out Vertically:横向布局
Lay Out Horizontally in Splitter: 纵向分裂式布局
Lay Out Vertically in Splitter:横向分裂式布局
4. 此时,窗体与控件绑定成功,可以随着窗体大小改变而改变。但是还有控件的sizePolicy可以调节所需功能。
如:
本文个人理解,如有不对请留言。
python安装PyQt检测是否成功时弹出这样的窗口是什么原因
Python3 安装 PyQt5 -pycharm 环境搭建
执行命令:
pip3 install PyQt5
PyQt5+python3+pycharm开发环境配置
1.下载PyQt
官方网站:
我的操作系统是64位的,安装的是Python3.4.3,所以我选择下载:PyQt5-5.4.1-gpl-Py3.4-Qt5.4.1-x64.exe
单击安装即可。
PyQt5安装完后,需要修改系统变量
QT_QPA_PLATFORM_PLUGIN_PATH
C:\Python34\Lib\site-packages\PyQt5\plugins ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-----------------这是我PyQt5的plugins文件夹所在位置
2.配置PyCharm
1)打开PyCharm,执行快捷键ctrl+alt+s打开设置界面,输入tool,点开external tools,配置qtdesigner。
点击左上角的加号,作如下配置:
在Qt Designer的设置中,Program选择PyQt安装目录中?designer.exe?的路径
Work directory 使用变量?$FileDir$?(点击后面的 Insert macro 按钮可以不用输入双击上屏)
找不到 ?qtdesigner
执行如下命令 安装 pyqt_toools
pip3.5 install PyQt5-tools
2).设置“PyUIC”?-- 这个主要是用来将 Qt界面 转换成 py代码
在PyUIC的设置中,其他的都差不多,Program 写入Python的地址,Parameters写入
-m PyQt5.uic.pyuic ?$FileName$ -o $FileNameWithoutExtension$.py
把上面的Python路径修改成自己的即可!
Work directory 使用变量?$FileDir$
使用时先用QtDesigner生成ui文件,然后利用PyUIC将ui文件转换成对应python文件
-----------------------------------------------------华丽的分割线--------------------------------------------------------------------
最近用到了资源文件,资源文件需要用pyrcc5.exe转码,配置方式如图
PyQt5编程(17):窗口事件
1.改变窗口状态
下列的方法可用来改变或判断窗口的状态(最小化、最大化、隐藏和显示):
from PyQt5 import QtCore, QtWidgets
class MyWindow(QtWidgets.QWidget):
def init (self, parent=None):
QtWidgets.QWidget. init (self, parent)
self.resize(300, 100)
def changeEvent(self, e):
if e.type() == QtCore.QEvent.WindowStateChange:
if self.isMinimized():
print("窗口最小化")
elif self.isMaximized():
print("窗口最大化")
elif self.isFullScreen():
print("全屏显示")
elif self.isActiveWindow():
print("活动窗口")
QtWidgets.QWidget.changeEvent(self, e)
def showEvent(self, e):
print("窗口显示")
QtWidgets.QWidget.showEvent(self, e)
def hideEvent(self, e):
print("窗口隐藏")
QtWidgets.QWidget.hideEvent(self, e)
if name == " main ":
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
2.改变窗口的位置和尺寸
移动窗口、调整窗口尺寸时,下列方法将被调用:
from PyQt5 import QtWidgets
class MyWindow(QtWidgets.QWidget):
def init (self, parent=None):
QtWidgets.QWidget. init (self, parent)
self.resize(300, 100)
def moveEvent(self, e):
print("x = {0}; y = {1}".format(e.pos().x(), e.pos().y()))
QtWidgets.QWidget.moveEvent(self, e)
def resizeEvent(self, e):
print("w = {0}; h = {1}".format(e.size().width(),e.size().height()))
QtWidgets.QWidget.resizeEvent(self, e)
if name == " main ":
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
3.重绘窗口
当控件或控件的部分变为可见时,控件需要重绘。此时,paintEvent(self,event)被调用。event参数包含QPaintEvent类的实例,通过该类有以下方法:
4.阻止窗口关闭
通过单击窗口标题栏中的关闭按钮或调用close()方法来关闭窗口时,closeEvent(self,event)方法被调用。 通过event参数可获得QCloseEvent类的一个对象。 为了防止窗口关闭,必须通过该对象调用ignore()方法,否则调用accept()方法。
下面的例子为:单击关闭按钮将显示一个标准对话框,要求确认是否关闭该窗口。 如果用户单击“是”按钮,则关闭窗口;如果用户单击“否”按钮,则仅关闭对话框,窗口不会被关闭。
from PyQt5 import QtWidgets
class MyWindow(QtWidgets.QWidget):
def init (self, parent=None):
QtWidgets.QWidget. init (self, parent)
self.resize(300, 100)
def closeEvent(self, e):
result = QtWidgets.QMessageBox.question(self,
"关闭窗口确认",
"真的要关闭窗口?",
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,
QtWidgets.QMessageBox.No)
if result == QtWidgets.QMessageBox.Yes:
e.accept()
QtWidgets.QWidget.closeEvent(self, e)
else:
e.ignore()
if name == " main ":
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())