1
- # -*- coding: UTF-8 -*-
2
- # Copyright (C) 2024 Chen Junren, Inc. All Rights Reserved
3
- # @Author : Chen Junren
4
- # @Project : Weather
5
- # @Product : Pycharm v2022.3.3
6
- # @File : Weather.py
1
+ """
2
+ -*- coding: UTF-8 -*-
3
+ Copyright (C) 2024 Chen Junren, Inc. All Rights Reserved
4
+ @Author : Chen Junren
5
+ @Project : Weather
6
+ @Product : Pycharm v2022.3.3
7
+ @File : Weather.py
8
+ """
9
+
7
10
import datetime
8
11
import json
9
12
import locale
15
18
import webbrowser
16
19
from json import JSONDecodeError
17
20
21
+ import pyperclip
18
22
import requests
19
23
from PyQt5 import QtCore , QtGui , QtWidgets
20
24
from PyQt5 .QtCore import Qt
@@ -91,7 +95,7 @@ def get_code(table, city):
91
95
return table [city ]
92
96
93
97
94
- def URL (url : str ):
98
+ def URL (url : str ) -> None :
95
99
"""
96
100
Open the url in browser.
97
101
:param url: The url.
@@ -100,7 +104,18 @@ def URL(url: str):
100
104
webbrowser .open (url )
101
105
102
106
103
- def Open (file : str ):
107
+ def copy (self , text : str ) -> None :
108
+ """
109
+ Copy the text
110
+ :param self: Ui Form
111
+ :param text: Text to copy
112
+ :return: None
113
+ """
114
+ pyperclip .copy (text )
115
+ self .pushButton .setText ("复制成功" )
116
+
117
+
118
+ def Open (file : str ) -> None :
104
119
"""
105
120
Open the file.
106
121
:param file: The path of the file.
@@ -130,7 +145,6 @@ def get_weather_1(city: str, code: str, dates: QtCore.QDate):
130
145
global key
131
146
key = read_settings ().get ("key" )
132
147
html = f"https://devapi.qweather.com/v7/weather/7d?key={ key } &location={ code } "
133
- # hef = f"https://devapi.qweather.com/v7/weather/now?key={key}&location={code}"
134
148
air = f"https://devapi.qweather.com/v7/air/5d?key={ key } &location={ code } "
135
149
warning = f"https://devapi.qweather.com/v7/warning/now?key={ key } &location={ code } "
136
150
info = requests .get (html )
@@ -139,7 +153,6 @@ def get_weather_1(city: str, code: str, dates: QtCore.QDate):
139
153
air .encoding = "utf-8"
140
154
warning = requests .get (warning )
141
155
warning .encoding = "utf-8"
142
- # logging.info(info,info2,air,warning)
143
156
info_json = info .json ()
144
157
# print(info_json)
145
158
# info_2_json = info2.json()
@@ -197,7 +210,7 @@ def get_weather_1(city: str, code: str, dates: QtCore.QDate):
197
210
date = f"日 期:{ we_listed ['fxDate' ]} \n "
198
211
temp = (
199
212
f"温 度:最高温{ we_listed ['tempMax' ]} ℃ \n "
200
- f" 最低温{ we_listed ['tempMin' ]} ℃\n "
213
+ f" 最低温{ we_listed ['tempMin' ]} ℃\n "
201
214
)
202
215
# temp_now = f"实时温度:{info_2_json['now']['temp']}℃\n"
203
216
humidity = f"湿 度:{ we_listed ['humidity' ]} %\n "
@@ -278,20 +291,32 @@ def get_weather_5(code2: str):
278
291
279
292
280
293
class Ui_Form (object ):
294
+ """
295
+ The Main Window.
296
+ """
297
+
281
298
def setupUi (self , Form ):
299
+ """
300
+ Set up UI.
301
+ :param Form:
302
+ :return:
303
+ """
282
304
Form .setObjectName ("Form" )
283
- Form .resize (599 , 483 )
305
+ Form .resize (600 , 480 )
284
306
font = QtGui .QFont ()
285
307
font .setFamily ("荆南麦圆体" )
286
308
Form .setFont (font )
287
309
Form .setCursor (QtGui .QCursor (QtCore .Qt .ArrowCursor ))
288
310
self .layoutWidget = QtWidgets .QWidget (Form )
289
- self .layoutWidget .setGeometry (QtCore .QRect (50 , 70 , 301 , 62 ))
311
+ self .layoutWidget .setGeometry (QtCore .QRect (50 , 70 , 300 , 60 ))
290
312
self .layoutWidget .setObjectName ("layoutWidget" )
313
+ self .setWindowIcon (QtGui .QIcon ("Weather.png" ))
291
314
self .verticalLayout = QtWidgets .QVBoxLayout (self .layoutWidget )
292
315
self .verticalLayout .setContentsMargins (0 , 0 , 0 , 0 )
293
316
self .verticalLayout .setObjectName ("verticalLayout" )
317
+
294
318
self .label = QtWidgets .QLabel (self .layoutWidget )
319
+
295
320
font = QtGui .QFont ()
296
321
font .setFamily ("荆南麦圆体" )
297
322
font .setPointSize (16 )
@@ -315,11 +340,13 @@ def setupUi(self, Form):
315
340
self .lineEdit .setObjectName ("lineEdit" )
316
341
self .horizontalLayout .addWidget (self .lineEdit )
317
342
self .verticalLayout .addLayout (self .horizontalLayout )
318
- self .label_3 = QtWidgets .QLabel (Form )
319
- self .label_3 .setGeometry (QtCore .QRect (380 , 300 , 160 , 30 ))
320
- self .label_3 .setMinimumSize (QtCore .QSize (160 , 30 ))
321
- self .label_3 .setText ("" )
322
- self .label_3 .setObjectName ("label_3" )
343
+ self .label_114 = QtWidgets .QLabel (Form )
344
+ # self.layoutWidget
345
+ self .label_114 .setAlignment (Qt .AlignCenter )
346
+ self .label_114 .setGeometry (QtCore .QRect (200 , 400 , 160 , 30 ))
347
+ self .label_114 .setMinimumSize (QtCore .QSize (160 , 30 ))
348
+ self .label_114 .setText ("" )
349
+ self .label_114 .setObjectName ("label_114" )
323
350
self .verticalLayoutWidget = QtWidgets .QWidget (Form )
324
351
self .verticalLayoutWidget .setGeometry (QtCore .QRect (380 , 70 , 160 , 301 ))
325
352
self .verticalLayoutWidget .setObjectName ("verticalLayoutWidget" )
@@ -394,17 +421,37 @@ def __init__(self, city, infos):
394
421
None
395
422
"""
396
423
super ().__init__ ()
424
+ # layout1 = QtWidgets.QVBoxLayout()
425
+ # layout1.setAlignment(QtCore.Qt.AlignHCenter | Qt.AlignVCenter)
426
+ # widget = QtWidgets.QWidget()
397
427
layout = QtWidgets .QHBoxLayout ()
428
+ layout1 = QtWidgets .QHBoxLayout ()
429
+ layout .setAlignment (Qt .AlignHCenter | Qt .AlignVCenter )
430
+ layout1 .setAlignment (Qt .AlignHCenter | Qt .AlignVCenter )
431
+
432
+ widget = QtWidgets .QWidget ()
433
+ widget .setLayout (layout1 )
434
+ widget1 = QtWidgets .QWidget ()
435
+ widget1 .setLayout (layout )
436
+ layout2 = QtWidgets .QVBoxLayout ()
437
+ layout2 .setAlignment (Qt .AlignHCenter | Qt .AlignVCenter )
438
+ layout2 .addWidget (widget1 )
439
+ layout2 .addWidget (widget )
440
+ # widget.setLayout(layout)
441
+ # layout1.setSizeConstraint()
442
+ # widget.setFixedSize(960,80)
443
+
398
444
self .setWindowTitle (f"五日天气 - { city } 市" )
399
- self .setLayout (layout )
400
- self .setFixedSize (1000 , 400 )
401
- self .resize (1000 , 400 )
445
+ self .setLayout (layout2 )
446
+ self .setFixedSize (960 , 480 )
447
+ self .resize (960 , 480 )
402
448
self .setWindowIcon (QtGui .QIcon ("Weather.png" ))
403
449
font = QtGui .QFont ()
404
450
font .setPointSize (12 )
405
451
font .setFamily ("荆南麦圆体" )
406
452
self .setFont (font )
407
453
self .label = QtWidgets .QLabel ()
454
+
408
455
layout .addWidget (self .label )
409
456
self .label .setText (infos [0 ])
410
457
self .label .setAlignment (QtCore .Qt .AlignLeft | Qt .AlignVCenter )
@@ -424,6 +471,17 @@ def __init__(self, city, infos):
424
471
layout .addWidget (self .label4 )
425
472
self .label4 .setText (infos [4 ])
426
473
self .label4 .setAlignment (QtCore .Qt .AlignLeft | Qt .AlignVCenter )
474
+ self .pushButton = QtWidgets .QPushButton ()
475
+ self .pushButton .setFixedSize (160 , 40 )
476
+ self .pushButton .setText ("复制" )
477
+ layout1 .addWidget (self .pushButton )
478
+
479
+ self .pushButton .clicked .connect (
480
+ lambda : copy (
481
+ self , str ("" .join ([f"{ str (x )} \n " for x in infos ]).replace (" " , "" ))
482
+ )
483
+ )
484
+ # layout1.addWidget(self.pushButton)
427
485
428
486
429
487
class OneDay (QWidget ):
@@ -443,27 +501,50 @@ def __init__(self, city, dated, index):
443
501
None
444
502
"""
445
503
super ().__init__ ()
446
- layout = QtWidgets .QHBoxLayout ()
504
+ layout = QtWidgets .QVBoxLayout ()
505
+ layout1 = QtWidgets .QVBoxLayout ()
447
506
self .setWindowTitle (f"{ dated } - 天气 - { city } 市" )
448
507
self .setLayout (layout )
449
- self .setFixedSize (700 , 300 )
450
- self .resize (700 , 300 )
508
+ self .setFixedSize (700 , 400 )
509
+ self .resize (700 , 400 )
451
510
self .setWindowIcon (QtGui .QIcon ("Weather.png" ))
452
511
font = QtGui .QFont ()
453
512
font .setPointSize (12 )
454
513
font .setFamily ("荆南麦圆体" )
455
514
self .setFont (font )
456
- self .label = QtWidgets .QLabel ()
457
- self .label .setAlignment (Qt .AlignCenter )
458
- self .label .setWordWrap (True )
459
515
460
- layout .addWidget (self .label )
461
- # print('Weather_JSON:::::',index)
516
+ self .label = QtWidgets .QTextEdit ()
517
+ self .label .setReadOnly (True )
518
+ # self.label.setScaledContents(True)
519
+ layout .setGeometry (QtCore .QRect (150 , 60 , 400 , 280 ))
520
+ # layout.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
521
+ # self.label.setWordWrap(True)
462
522
weather_json = index
463
- # print(weather_json)
464
523
self .label .setText (weather_json )
465
- self .label .setAlignment (QtCore .Qt .AlignLeft | Qt .AlignVCenter )
466
- self .label1 = QtWidgets .QLabel ()
524
+ self .pushButton = QtWidgets .QPushButton ()
525
+ self .pushButton .setFixedSize (160 , 40 )
526
+ self .pushButton .setText ("复制" )
527
+ self .label .setFixedSize (int (self .width () * 2 / 3 ), 280 )
528
+ self .label .setAlignment (Qt .AlignLeft | Qt .AlignVCenter )
529
+ # layout1.setAlignment(Qt.AlignCenter)
530
+ self .pushButton .clicked .connect (
531
+ lambda : copy (self , str (weather_json ).replace (" " , "" ))
532
+ )
533
+ widget1 = QtWidgets .QWidget ()
534
+ widget = QtWidgets .QWidget ()
535
+ layout .addWidget (widget )
536
+ layout .addWidget (widget1 )
537
+ widget .setLayout (layout1 )
538
+ layout2 = QtWidgets .QVBoxLayout ()
539
+ widget1 .setLayout (layout2 )
540
+ layout1 .addWidget (self .label )
541
+ layout2 .addWidget (self .pushButton )
542
+ layout2 .setAlignment (Qt .AlignHCenter | Qt .AlignVCenter )
543
+
544
+ layout1 .setAlignment (Qt .AlignHCenter | Qt .AlignVCenter )
545
+ layout .setAlignment (Qt .AlignHCenter | Qt .AlignVCenter )
546
+
547
+ # self.pushButton.
467
548
468
549
469
550
class Helps (QWidget ):
@@ -498,7 +579,7 @@ def __init__(self):
498
579
499
580
layout .addWidget (self .label )
500
581
self .label .setText (
501
- "请先输入城市再查询\n 按按钮查询天气\n 按回车查询单日天气\n 按I键打开该页面 \n 按S键最小化窗口 "
582
+ "请先输入城市再查询\n 按按钮查询天气\n 按回车查询单日天气\n 按ESC键最小化窗口 "
502
583
)
503
584
504
585
self .pushButton_5 = QtWidgets .QPushButton ()
@@ -527,7 +608,7 @@ class Weather(QWidget, Ui_Form):
527
608
table: A dictionary containing city codes.
528
609
529
610
lineEdit: A QLineEdit widget for entering the city name.
530
- label_3 : A QLabel widget for displaying status messages.
611
+ label_114 : A QLabel widget for displaying status messages.
531
612
532
613
Methods:
533
614
__init__: Initializes the weather application.
@@ -579,7 +660,7 @@ def getWeather_1(self):
579
660
err_msg = "输入错误"
580
661
# logging.info(citycode)
581
662
# logging.info(f"错误:{city}")
582
- self .label_3 .setText ("正在查询中..." )
663
+ self .label_114 .setText ("正在查询中..." )
583
664
if not err_msg :
584
665
# logging.info("Not ERROR MESSAGE")
585
666
try :
@@ -613,10 +694,10 @@ def getWeather_1(self):
613
694
self .one = OneDay (city , infos [1 ], infos [0 ])
614
695
self .one .show ()
615
696
# self.textEdit.setText()
616
- self .label_3 .setText ("查询成功" )
617
- self .label_3 .setText ("查询成功" )
697
+ self .label_114 .setText ("查询成功" )
698
+ self .label_114 .setText ("查询成功" )
618
699
else :
619
- self .label_3 .setText (f"查询失败 { err_msg } " )
700
+ self .label_114 .setText (f"查询失败 { err_msg } " )
620
701
# self.textEdit.setText("")
621
702
622
703
self .lineEdit .clear ()
@@ -650,7 +731,7 @@ def getWeather_5(self):
650
731
except Exception as e :
651
732
logging .error (repr (e ))
652
733
err_msg = "未知错误"
653
- self .label_3 .setText ("正在查询中..." )
734
+ self .label_114 .setText ("正在查询中..." )
654
735
if not err_msg :
655
736
try :
656
737
# global info
@@ -681,9 +762,9 @@ def getWeather_5(self):
681
762
self .w = FiveDays (city , infos = FiveD )
682
763
self .w .show ()
683
764
# self.textEdit.setText()
684
- self .label_3 .setText ("查询成功" )
765
+ self .label_114 .setText ("查询成功" )
685
766
else :
686
- self .label_3 .setText (f"查询失败 { err_msg } " )
767
+ self .label_114 .setText (f"查询失败 { err_msg } " )
687
768
# self.textEdit.setText("")
688
769
689
770
self .lineEdit .clear ()
@@ -699,20 +780,20 @@ def keyPressEvent(self, e):
699
780
None
700
781
701
782
"""
702
- if e .key () == Qt .Key_1 :
783
+ if e .key () == Qt .Key_Enter :
703
784
self .getWeather_1 ()
704
- if e .key () == Qt .Key_5 :
705
- self .getWeather_5 ()
706
- if e .key () == Qt .Key_S :
785
+ # if e.key() == Qt.Key_Shift :
786
+ # self.getWeather_5()
787
+ if e .key () == Qt .Key_Escape :
707
788
self .showMinimized ()
708
789
# if e.key() == Qt.Key_R:
709
- # self.label_3 .setText("打开设置文件")
790
+ # self.label_114 .setText("打开设置文件")
710
791
# os.system(".\\settings.txt")
711
792
# logging.info("打开设置文件")
712
- if e .key () == Qt .Key_I :
713
- self .help1 = Helps ()
714
- self .help1 .show ()
715
- logging .info ("显示帮助" )
793
+ # if e.key() == Qt.Key_Control :
794
+ # self.help1 = Helps()
795
+ # self.help1.show()
796
+ # logging.info("显示帮助")
716
797
717
798
718
799
if __name__ == "__main__" :
0 commit comments