pyqt5弹出窗口(pyqt5关闭子窗口)

http://www.itjxue.com  2023-02-09 12:49  来源:未知  点击次数: 

用的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_())

(责任编辑:IT教学网)

更多

推荐人物新闻文章