脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - PyQt5笔记之弹出窗口大全

PyQt5笔记之弹出窗口大全

2021-07-16 00:46罗兵 Python

今天小编就为大家分享一篇PyQt5笔记之弹出窗口大全,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

本文实现了pyqt5个各种弹出窗口:输入框、消息框、文件对话框、颜色对话框、字体对话框、自定义对话框

其中,为了实现自定义对话框的返回值,使用了信号/槽

本文基于 windows 7 + python 3.4

效果图:

PyQt5笔记之弹出窗口大全

PyQt5笔记之弹出窗口大全

取得弹出窗口的返回值

PyQt5笔记之弹出窗口大全

全部代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
from pyqt5.qtwidgets import *
from pyqt5.qtcore import qt, pyqtsignal, qtimer
 
 
    
class mywindow(qwidget):
 
  def __init__(self):
 
    super().__init__()
    
    self.setwindowtitle('pyqt5 弹出窗口(框)大全')
    self.resize(400, 300)
    
    # 全局布局(注意参数 self)
    wl = qvboxlayout(self)
 
    # 局部布局
    h1 = qhboxlayout() # 输入框
    h2 = qhboxlayout() # 消息窗口
    h3 = qhboxlayout() # 文件(夹)打开,保存
    h4 = qhboxlayout() # 颜色、字体、自定义
 
    
    btn11 = qpushbutton('输入:整数')
    btn12 = qpushbutton('输入:小数')
    btn13 = qpushbutton('输入:文本')
    btn14 = qpushbutton('输入:多文')
    btn15 = qpushbutton('输入:选项')
    
    btn21 = qpushbutton('消息:信息')
    btn22 = qpushbutton('消息:问答')
    btn23 = qpushbutton('消息:警告')
    btn24 = qpushbutton('消息:危险')
    btn25 = qpushbutton('消息:关于')
    
    btn31 = qpushbutton('文件:文件夹')
    btn32 = qpushbutton('文件:单文件')
    btn33 = qpushbutton('文件:多文件')
    btn34 = qpushbutton('文件:保存')
    btn35 = qpushbutton('文件:另存为')
 
    btn41 = qpushbutton('颜色')
    btn42 = qpushbutton('字体')
    btn43 = qpushbutton('自定义')
    
    for btn in (btn11, btn12, btn13, btn14, btn15):
      h1.addwidget(btn)
      
    for btn in (btn21, btn22, btn23, btn24, btn25):
      h2.addwidget(btn)
      
    for btn in (btn31, btn32, btn33, btn34, btn35):
      h3.addwidget(btn)
      
    for btn in (btn41, btn42, btn43):
      h4.addwidget(btn)
      
    btn11.clicked.connect(self.do_btn11) # 输入:整数
    btn12.clicked.connect(self.do_btn12) # 输入:小数
    btn13.clicked.connect(self.do_btn13) # 输入:文本
    btn14.clicked.connect(self.do_btn14) # 输入:多文
    btn15.clicked.connect(self.do_btn15) # 输入:选项
    
    btn21.clicked.connect(self.do_btn21) # 消息:信息
    btn22.clicked.connect(self.do_btn22) # 消息:问答
    btn23.clicked.connect(self.do_btn23) # 消息:警告
    btn24.clicked.connect(self.do_btn24) # 消息:危险
    btn25.clicked.connect(self.do_btn25) # 消息:关于
    
    btn31.clicked.connect(self.do_btn31) # 文件:文件夹
    btn32.clicked.connect(self.do_btn32) # 文件:单文件
    btn33.clicked.connect(self.do_btn33) # 文件:多文件
    btn34.clicked.connect(self.do_btn34) # 文件:保存
    btn35.clicked.connect(self.do_btn35) # 文件:另存为
 
    btn41.clicked.connect(self.do_btn41) # 颜色
    btn42.clicked.connect(self.do_btn42) # 字体
    btn43.clicked.connect(self.do_btn43) # 自定义
 
    # 加到全局布局
    wl.addlayout(h1)
    wl.addlayout(h2)
    wl.addlayout(h3)
    wl.addlayout(h4)
    
    self.window2 = mywindow2()             # 自定义窗口
    self.window2.before_close_signal.connect(self.echo) # 接收自定义窗口关闭时发送过来的信号,交给 echo 函数显示
    
 
  def echo(self, value):
    '''显示对话框返回值'''
    qmessagebox.information(self, "返回值""得到:{}\n\ntype: {}".format(value, type(value)), qmessagebox.yes | qmessagebox.no)
    #pass
    
  # =====================================================================
  def do_btn11(self, event): # 输入:整数
    #后面四个数字的作用依次是 初始值 最小值 最大值 步幅
    value, ok = qinputdialog.getint(self, "输入框标题", "这是提示信息\n\n请输入整数:", 37, -10000, 10000, 2)
    #self.echo(value)
    
  def do_btn12(self, event): # 输入:小数
    #后面四个数字的作用依次是 初始值 最小值 最大值 小数点后位数
    value, ok = qinputdialog.getdouble(self, "输入框标题", "这是提示信息\n\n请输入整数:", 37.56, -10000, 10000, 2)
    self.echo(value)
    
  def do_btn13(self, event): # 输入:文本
    #第三个参数表示显示类型,可选,有正常(qlineedit.normal)、密碼( qlineedit. password)、不显示( qlineedit. noecho)三种情况
    value, ok = qinputdialog.gettext(self, "输入框标题", "这是提示信息\n\n请输入文本:", qlineedit.normal, "这是默认值")
    self.echo(value)
    
  def do_btn14(self, event): # 输入:多文
    value, ok = qinputdialog.getmultilinetext(self, "输入框标题", "这是提示信息\n\n请输入地址:", "默认的\n我的地址是\n中国广东广州番禺")
    self.echo(value)
    
  def do_btn15(self, event): # 输入:选项
    #1为默认选中选项目,true/false 列表框是否可编辑。
    items = ["spring", "summer", "fall", "winter"]
    value, ok = qinputdialog.getitem(self, "输入框标题", "这是提示信息\n\n请选择季节:", items, 1, true)
    self.echo(value)
    
  # =====================================================================
  def do_btn21(self, event): # 消息:信息
    reply = qmessagebox.information(self,
                  "消息框标题",
                  "这是一条消息。",
                  qmessagebox.yes | qmessagebox.no)
    self.echo(reply)
    
  def do_btn22(self, event): # 消息:问答
    reply = qmessagebox.question(self,
                  "消息框标题",
                  "这是一条问答吗?",
                  qmessagebox.yes | qmessagebox.no)
    self.echo(reply)
    
  def do_btn23(self, event): # 消息:警告
    reply = qmessagebox.warning(self,
                  "消息框标题",
                  "这是一条警告!",
                  qmessagebox.yes | qmessagebox.no)
    self.echo(reply)
    
  def do_btn24(self, event): # 消息:危险
    reply = qmessagebox.ctitical(self,
                  "消息框标题",
                  "危险!程序即将强制退出!!!\n\n这个按钮再也点不开。",
                  qmessagebox.yes | qmessagebox.no)
    self.echo(reply)
    
  def do_btn25(self, event): # 消息:关于
    reply = qmessagebox.about(self,
                  "消息框标题",
                  "这是关于软件的说明。。。",
                  qmessagebox.yes | qmessagebox.no)
    self.echo(reply)
    
  # =====================================================================
  def do_btn31(self, event): # 文件:文件夹
    dir = qfiledialog.getexistingdirectory(self,
                  "选取文件夹",
                  "c:/")         # 起始路径
    self.echo(dir)
    
  def do_btn32(self, event): # 文件:单文件
    file_, filetype = qfiledialog.getopenfilename(self,
                  "选取文件",
                  "c:/",
                  "all files (*);;text files (*.txt)"#设置文件扩展名过滤,注意用双分号间隔
    self.echo(file_)
    
  def do_btn33(self, event): # 文件:多文件
    files, ok = qfiledialog.getopenfilenames(self,
                  "多文件选择",
                  "c:/",
                  "all files (*);;text files (*.txt)")
    self.echo(files)
    
  def do_btn34(self, event): # 文件:保存
    file_, ok = qfiledialog.getsavefilename(self,
                  "文件保存",
                  "c:/",
                  "all files (*);;text files (*.txt)")
    self.echo(file_)
    
  def do_btn35(self, event): # 文件:另存为
    file_, ok = qfiledialog.getsavefilename(self,
                  "文件另存为",
                  "c:/",
                  "all files (*);;text files (*.txt)")
    self.echo(file_)
 
  # =====================================================================
  def do_btn41(self, event): # 颜色
    color = qcolordialog.getcolor(qt.blue, self, "select color")
    self.echo(color)
    
  def do_btn42(self, event): # 字体
    font, ok = qfontdialog.getfont()
    self.echo(font)
    
  def do_btn43(self, event): # 自定义
    
    self.window2.show()
  
 
class mywindow2(qwidget):
  '''自定义窗口'''
  # 知识点:
  # 1.为了得到返回值用到了自定义的信号/槽
  # 2.为了显示动态数字,使用了计时器
  
  before_close_signal = pyqtsignal(int)    # 自定义信号(int类型)
  
  def __init__(self):
    super().__init__()
    
    self.sec = 0
    self.setwindowtitle('自定义窗口')
    self.resize(200,150)
 
    self.lcd = qlcdnumber(18, self)
    btn1 = qpushbutton(self, text="测试")
    btn2 = qpushbutton(self, text="关闭")
 
    layout = qvboxlayout(self)
    layout.addwidget(self.lcd)
    layout.addwidget(btn1)
    layout.addwidget(btn2)
    
    self.timer = qtimer()
 
    self.timer.timeout.connect(self.update) # 每次计时结束,触发update
    btn1.clicked.connect(self.starttimer)
    btn2.clicked.connect(self.stoptimer)  # 去到关闭前的处理
  
  def update(self): 
    self.sec += 1
    self.lcd.display(self.sec)       # led显示数字+1
   
  def starttimer(self):
    self.timer.start(1000)         # 计时器每秒计数
 
  def stoptimer(self):
    self.timer.stop() 
    self.sec = 0
    self.before_close_signal.emit(self.lcd.value()) # 发送信号,带参数 888
    self.close()              # 然后窗口关闭
 
  # 默认关闭事件
  def closeevent(self, e):
    self.stoptimer()
 
if __name__=="__main__":
  import sys
  
  app = qapplication(sys.argv)
  win = mywindow()
  win.show()
  sys.exit(app.exec_())

以上这篇pyqt5笔记之弹出窗口大全就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://www.cnblogs.com/hhh5460/p/5174266.html

延伸 · 阅读

精彩推荐