前段时间看了下pyqt5,还写了个计算器玩玩,python使用pyqt5制作计算器,前面也写过一个成语接龙的小程序,自制成语接龙。就想着把他俩结合一下,做个有界面的成语接龙玩玩。
代码如下:
首先是chengyu.py,这个文件是界面文件(chengyu.ui)转出来的,看我上篇[python使用pyqt5制作计算器]这篇文章就知道怎么弄得了,不想知道怎么弄也没关系,直接创建一个chengyu.py文件把我代码粘上去就好了,没有chengyu.ui文件也能跑通代码
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'chengyu.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(570, 537)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(200, 10, 121, 51))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
self.label.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setPointSize(15)
self.label.setFont(font)
self.label.setObjectName("label")
self.lineEdit_2_zhurenjie = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_2_zhurenjie.setGeometry(QtCore.QRect(10, 249, 121, 41))
self.lineEdit_2_zhurenjie.setObjectName("lineEdit_2_zhurenjie")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(150, 250, 75, 41))
self.pushButton.setObjectName("pushButton")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(10, 60, 541, 131))
font = QtGui.QFont()
font.setPointSize(11)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.label_3_qingkuang = QtWidgets.QLabel(self.centralwidget)
self.label_3_qingkuang.setGeometry(QtCore.QRect(10, 370, 521, 31))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_3_qingkuang.sizePolicy().hasHeightForWidth())
self.label_3_qingkuang.setSizePolicy(sizePolicy)
self.label_3_qingkuang.setText("")
self.label_3_qingkuang.setObjectName("label_3_qingkuang")
self.label_3_diannaojie = QtWidgets.QLabel(self.centralwidget)
self.label_3_diannaojie.setGeometry(QtCore.QRect(150, 360, 401, 20))
self.label_3_diannaojie.setText("")
self.label_3_diannaojie.setObjectName("label_3_diannaojie")
self.label_4_first_random = QtWidgets.QLabel(self.centralwidget)
self.label_4_first_random.setGeometry(QtCore.QRect(20, 210, 511, 31))
self.label_4_first_random.setText("")
self.label_4_first_random.setObjectName("label_4_first_random")
self.label_5_diannaojie = QtWidgets.QLabel(self.centralwidget)
self.label_5_diannaojie.setGeometry(QtCore.QRect(10, 300, 511, 41))
self.label_5_diannaojie.setText("")
self.label_5_diannaojie.setObjectName("label_5_diannaojie")
# MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 570, 23))
self.menubar.setObjectName("menubar")
# MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
# MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "成语接龙游戏"))
self.pushButton.setText(_translate("MainWindow", "确定"))
self.label_2.setText(_translate("MainWindow", "成语接龙游戏,请接成语或俗语,接的第一个字要跟上面的成语最后一个字相同哦\n"
"\n"
"当你不想玩的时候可以输入\"退出\"结束\n"
"\n"
"当你玩不过我的时候可以输入\"我认输\"也可以结束游戏,哈哈哈哈"))
接下来是chengyujielong.py文件:
这个脚本需要chengyu.txt,文件里面放的都是成语,爬虫代码
chengyujielong.py:
import random
def get_list():
with open("chengyu.txt", "r+", encoding="utf-8") as f:
content = f.read()
url_list = content[:-1].split(',')
return url_list
def get_first_word(url_list):
randoms=random.choice(url_list)
randoms='我先说一个:'+randoms
return randoms
def jiqijie(url_list,zhuren):
chengyus=[]
for url in url_list:
if url[0]==zhuren[-1]:
chengyus.append(url)
a=random.choice(chengyus)
return a
那么最后就是run.py文件了:
# -*- coding: utf-8 -*-
# @Author : LiMengDi
# @FILE : run.py.py
# @Time : 2019/11/28 14:43
# @Software : PyCharm
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
from chengyu import Ui_MainWindow
from chengyujielong import get_list,get_first_word,jiqijie
class mwindow(QWidget, Ui_MainWindow):
def __init__(self):
super(mwindow, self).__init__()
self.setupUi(self)
self.url_list = get_list()
self.randoms = get_first_word(self.url_list)
def main_s(self):
self.randoms_first(self.randoms)
self.pushButton.clicked.connect(self.get_zhurenjie)
def randoms_first(self,randoms):
self.label_4_first_random.setText(randoms)
def get_zhurenjie(self):
text=self.lineEdit_2_zhurenjie.text()
self.lineEdit_2_zhurenjie.clear()
if text=='退出':
app.quit()
if text == '我认输':
app.quit()
if text not in self.url_list:
self.label_3_qingkuang.setText('耍赖,这不是个成语或俗语,重新说')
elif text[0] != self.randoms[-1]:
self.label_3_qingkuang.clear()
self.label_3_qingkuang.setText('耍赖,你没有接最后一个字,最后一个字是:{}'.format(str(self.randoms[-1])))
else:
self.label_3_qingkuang.clear()
try:
jiqi = jiqijie(self.url_list, text)
self.randoms=jiqi
self.label_4_first_random.clear()
self.label_3_diannaojie.setText('俺接:{}'.format(str(jiqi)))
except:
self.label_3_qingkuang.setText('俺接不出来,你赢了!')
if __name__ == '__main__':
app = QApplication(sys.argv)
w = mwindow()
w.show()
w.main_s()
sys.exit(app.exec_())
这是我的文件摆放:
文件就这些,放好后就可以运行run.py文件了,老规矩,看效果:
运行之后出来这个界面
接下来我们在输入框里瞎填点东西,点确定,看他反应:
点击确定之后:
嘿,蒙不住,那咱们给他填个成语,看效果:
点击确定:
嘿嘿,看来只能拿出我的真正实力了,接就接,发动我的脑筋,拿出杀手锏接它,不就是正开头的嘛
嘿嘿嗝,,咱接个正大光明,然后点击确定,看效果:
继续,继续搞它
填个法力无边点确定:
好吧,它也是有些实力的,于是经过我使用我深厚的文学功底与它大战一万八千六百回合之后:
哈哈哈哈,跟我斗。。
这个游戏结束也很简单,界面上写的规则也有
你可以在输入框输入“退出”,或者“我认输”,程序就结束了
另外,这个程序的成语都是自己爬取的,不可能把所有成语都爬全,然而判断是根据这些成语作出的,所以有时候你填个成语,它说你填的不是成语,可能只是它本身没有收录这个成语而已,游戏而已,不用当真
好了,今天的程序就玩到这,好好学习,天天向上