程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Python訂票系統】這才是看電影選座的正確方法,原來我們都上當了~(選座位、一鍵購票)

編輯:Python

導語

哈喽哈喽!我是木木子,已經斷更很久啦!忙碌很長一段時間了,現在告一段落。

後續會陸續更新,希望大家能夠多多支持我!啾咪.jpg

2022年揚帆起航,持續為大家輸出更多喜歡的內容,分享小編的學習到的知識給大家!

所有文章完整的素材+源碼都在

文末自取哦

PS:“天上的每一顆星,都是愛過我們的人。”

不要太過惋惜親人的離去,因為早晚有一天我們會在天上重逢。

在人間活著的日子,我們都有一個歸期,而那些逝去的人,會希望我們好好地活下去。          

                                                                                  ——【人生大事】 

我愛這離合悲歡,愛這煙火人間,電影《人生大事》將於6月24日上映。

很多人期待的電影點映不知道有人去看了沒?小編剛好卡點去了第一場,這是一部笑著笑著就

哭了的電影。  之後要看的小伙伴兒記得帶點兒紙巾哈。

今天小編是看了電影之後有感而發撒,代碼源於生活今天小編就教大家寫一款電影院選票系

統給大家。想看的小朋友可以這周天去看看,真不錯

正文

一、准備中

1)環境安裝

本文是基於tkinter的界面化小程序!初級版本寫的一個簡單的選票系統哈。

小編使用的環境:Python3、Pycharm社區版、tkinter、turtle、Pillow模塊,部分自

帶模塊不展示。(不會安裝的:小編會發給你們新手大禮包,包括安裝包、視頻、解答

疑問可以找我哈戳文末)

 模塊安裝:pip install -i https://pypi.douban.com/simple/+模塊名 

2)素材准備

電影院座位是用Turtle繪制完成的。電影院的購票界面是Tkinter寫的。

座位背景

界面電影選項素材(自選:小編隨便找的幾部截圖的哈)話說下面的我還看過幾部呢~

二、代碼展示

1)制作選票系統界面、按鈕等等。

import tkinter as tk
from PIL import Image
from PIL import ImageTk
import turtle
from tkinter import messagebox
from cinemaclass import Movie as M
def mainGui(x, y, z):
image = Image.open(x)
photo = ImageTk.PhotoImage(image)
label = tk.Label(image=photo, width=300, height=300)
label.image = photo
label.place(relx=y, rely=z)
window = tk.Tk()
moives = []
lst = []
for i in range(1, 9):
moives.append(M(str(i)))
def xuanpiao(x):
global window, moives
window1 = tk.Tk()
window1.geometry('1330x700')
click = ()
def callback(event):
# print("clicked at:", event.x, event.y) # 打印出該事件(按下鼠標)的x,y軸
# 打印出該事件(按下鼠標)的x,y軸
s = (event.x, event.y) # 把它寫到一個元組裡
x, y = s
if (160 <= x <= 760) and (100 <= y <= 550):
global click, lst
row = int((x - 160) / 60)
col = int((y - 100) / 45)
click = (col + 1, row + 1)
print(lst)
if movie.isbook(col + 1, row + 1) == False:
lst.append(click)
drawp(canva, movie, lst)
else:
messagebox.showinfo("該位置已購買!")
def yyyyyyyyyyyyyy(num):
global moives
mo = moives[x]
if num == 0:
global lst
sp = '是否購買'
if lst == []:
messagebox.showinfo("請選座!")
return None
for l in lst:
col, row = l
sp += f'{col}排{row}列 '
sp += "的座位?"
y = messagebox.askyesno("確認", sp)
if y:
for l in lst:
col, row = l
mo.book(col, row)
mo.save('data')
lst=[]
window1.destroy()
else:
lst = []
drawp(canva, movie, [], lst)
lst = []
window1.destroy()
b2 = tk.Button(window1, text='確認購座', font=('楷書', 12), command=lambda: yyyyyyyyyyyyyy(0))
b2.pack(side=tk.LEFT)
b2 = tk.Button(window1, text='返回', font=('楷書', 12), command=lambda: yyyyyyyyyyyyyy(1))
b2.pack(side=tk.LEFT)
window1.bind("<Button-1>", callback)
if x == 1:
window1.title('電影《你的世界如果沒有我》請選擇座位')
elif x == 2:
window1.title('電影《只要你過得比我好》請選擇座位')
elif x == 3:
window1.title('電影《揚名立萬》請選擇座位')
elif x == 4:
window1.title('電影《梅艷芳》請選擇座位')
elif x == 5:
window1.title('電影《笨鳥大冒險》請選擇座位')
elif x == 6:
window1.title('電影《古董局中局》請選擇座位')
elif x == 7:
window1.title('電影《長津湖》請選擇座位')
else:
window1.title('電影《門鎖》請選擇座位')
movie = moives[x]
def drawp(canva, moive: M, lst=None, lst2=None):
if lst == None:
lst = []
if lst2 == None:
lst2 = []
from turtle import Shape
theScreen = turtle.TurtleScreen(canva)
t = turtle.RawTurtle(theScreen, visible=True)
s = Shape("compound")
poly2 = ((-20, -10), (-30, -10), (-30, 15), (30, 15), (30, -10), (20, -10))
s.addcomponent(poly2, "pink", "black")
poly1 = (
(0, 0), (10, 0), (10, -10), (20, -10), (20, -30), (-20, -30), (-20, -10), (-10, -10), (-10, 0), (0, 0),)
s.addcomponent(poly1, "white", "black")
theScreen.register_shape("myshape1", s)
s2 = Shape("compound")
# poly2 = ((-10.0, -5.0), (-15.0, -5.0), (-15.0, 7.5), (15.0, 7.5), (15.0, -5.0), (10.0, -5.0))
s2.addcomponent(poly2, "white", "black")
# poly1 = ((0.0, 0.0), (5.0, 0.0), (5.0, -5.0), (10.0, -5.0), (10.0, -15.0), (-10.0, -15.0), (-10.0, -5.0), (-5.0, -5.0), (-5.0, 0.0), (0.0, 0.0))
s2.addcomponent(poly1, "red", "black")
theScreen.register_shape("myshape2", s2)
s3 = Shape("compound")
# poly2 = ((-10.0, -5.0), (-15.0, -5.0), (-15.0, 7.5), (15.0, 7.5), (15.0, -5.0), (10.0, -5.0))
s3.addcomponent(poly2, "white", "black")
# poly1 = ((0.0, 0.0), (5.0, 0.0), (5.0, -5.0), (10.0, -5.0), (10.0, -15.0), (-10.0, -15.0), (-10.0, -5.0), (-5.0, -5.0), (-5.0, 0.0), (0.0, 0.0))
s3.addcomponent(poly1, "green", "black")
theScreen.register_shape("myshape3", s3)
t.settiltangle(270)
t.penup()
t.ht()
t.speed(10)
moive.show()
##############
###############
for j in range(10):
for k in range(10):
if (k + 1, j + 1) in lst:
print('green:', lst)
t.shape('myshape3')
else:
if ((k + 1, j + 1) in lst2) or moive.isbook(k + 1, j + 1):
t.shape('myshape2')
else:
t.shape('myshape1')
x = j * 60
y = -k * 45
t.goto(x, y)
t.stamp()
# theScreen.mainloop()
canva = tk.Canvas(window1, relief=tk.FLAT)
canva.pack(fill='both', expand='yes')
drawp(canva, movie, )
window1.mainloop()
# aa = tk.Button(window1, text="Draw", command= lambda: drawp())
# aa.pack()
def chushi_jiemian():
global window
window.title('電影選座系統')
window.geometry('1330x700')
l = tk.Label(window, text='正在熱映(8部)', fg='red', font=('楷書', 20), width=30, height=2)
l.place(relx=0.37, rely=0.01)
mainGui(r'你的世界如果沒有我.jpg', 0.1, 0.1)
mainGui(r'只要你過的比我好.jpg', 0.3, 0.1)
mainGui(r'揚名立萬.jpg', 0.5, 0.1)
mainGui(r'梅艷芳.jpg', 0.7, 0.1)
mainGui(r'笨鳥大冒險.jpg', 0.1, 0.5)
mainGui(r'古董局中局.jpg', 0.3, 0.5)
mainGui(r'長津湖.jpg', 0.5, 0.5)
mainGui(r'門鎖.jpg', 0.7, 0.5)
b1 = tk.Button(window, text='點擊購票', font=('楷書', 12), command=lambda: xuanpiao(1))
b1.place(relx=0.165, y=350, height=20, relwidth=0.1)
b2 = tk.Button(window, text='點擊購票', font=('楷書', 12), command=lambda: xuanpiao(2))
b2.place(relx=0.365, y=350, height=20, relwidth=0.1)
b3 = tk.Button(window, text='點擊購票', font=('楷書', 12), command=lambda: xuanpiao(3))
b3.place(relx=0.565, y=350, height=20, relwidth=0.1)
b4 = tk.Button(window, text='點擊購票', font=('楷書', 12), command=lambda: xuanpiao(4))
b4.place(relx=0.765, y=350, height=20, relwidth=0.1)
b5 = tk.Button(window, text='點擊購票', font=('楷書', 12), command=lambda: xuanpiao(5))
b5.place(relx=0.165, y=635, height=20, relwidth=0.1)
b6 = tk.Button(window, text='點擊購票', font=('楷書', 12), command=lambda: xuanpiao(6))
b6.place(relx=0.365, y=635, height=20, relwidth=0.1)
b7 = tk.Button(window, text='點擊購票', font=('楷書', 12), command=lambda: xuanpiao(7))
b7.place(relx=0.565, y=635, height=20, relwidth=0.1)
b8 = tk.Button(window, text='點擊購票', font=('楷書', 12), command=lambda: xuanpiao(8))
b8.place(relx=0.765, y=635, height=20, relwidth=0.1)
window.mainloop()
chushi_jiemian()

2)繪制turtle購票之後的電影院座位。

import turtle as t
def goto(x, y):
t.penup()
t.goto(x, y)
t.pendown()
def seat(x, y,):
t.pensize(1)
t.color('black')
for i in range(10):
for j in range(10):
goto(-50 + i * 40, -50 + j * 40)
t.left(90)
t.fd(10)
t.right(90)
t.fd(20)
t.right(90)
t.fd(10)
t.right(90)
t.fd(5)
t.left(90)
t.fd(10)
t.right(90)
t.fd(10)
t.right(90)
t.fd(10)
t.left(90)
t.fd(5)
t.fd(5)
t.left(90)
t.fd(15)
t.left(90)
t.fd(30)
t.left(90)
t.fd(15)
t.left(90)
t.fd(10)
t.right(180)
goto(350, 450)
t.left(90)
t.fd(10)
t.right(90)
t.fd(20)
t.right(90)
t.fd(10)
t.right(90)
t.fd(5)
t.left(90)
t.fd(10)
t.right(90)
t.fd(10)
t.right(90)
t.fd(10)
t.left(90)
t.fd(5)
t.fd(5)
t.left(90)
t.fd(15)
t.left(90)
t.fd(30)
t.left(90)
t.fd(15)
t.left(90)
t.fd(10)
t.left(180)
t.pencolor('white')
goto(-50 + (x-1) * 40, -50 + (y-1) * 40)
t.left(90)
t.fd(10)
t.right(90)
t.fd(20)
t.right(90)
t.fd(10)
t.right(90)
t.fd(5)
t.left(90)
t.fd(10)
t.right(90)
t.fd(10)
t.right(90)
t.fd(10)
t.left(90)
t.fd(5)
t.fd(5)
t.left(90)
t.fd(15)
t.left(90)
t.fd(30)
t.left(90)
t.fd(15)
t.left(90)
t.fd(10)
t.left(180)
t.pencolor('black')
goto(-50 + (x-1) * 40, -50 + (y-1) * 40)
t.fillcolor('red')
t.begin_fill()
t.left(90)
t.fd(10)
t.right(90)
t.fd(20)
t.right(90)
t.fd(10)
t.right(90)
t.fd(5)
t.left(90)
t.fd(10)
t.right(90)
t.fd(10)
t.right(90)
t.fd(10)
t.left(90)
t.fd(5)
t.end_fill()
t.fillcolor('pink')
t.begin_fill()
t.fd(5)
t.left(90)
t.fd(15)
t.left(90)
t.fd(30)
t.left(90)
t.fd(15)
t.left(90)
t.fd(10)
t.left(90)
t.fd(10)
t.right(90)
t.fd(10)
t.right(90)
t.fd(10)
t.left(90)
t.fd(5)
t.end_fill()
t.left(180)
t.ht()
t.tracer(False)
seat(2, 1)
t.done()

這款電影院選票系統主要就分為這兩大塊內容。簡單的界面購票選票的都完成啦!

​三、效果展示

1)界面效果

2)點擊“長津湖”選座界面:

3)選座

4)購票成功

​總結

好啦!到這裡這款電影選座購票系統就寫完啦!雖然只是一款簡單的界面小程序,但是該有的

效果還是都有滴啦!有大佬也可以自行優化嘻嘻!

老規矩啦源碼文末免費拿,放心 都有哈!拿源碼之前記得給我三連一下啦~非常感謝大家!

完整的免費源碼領取處:找我吖!文末可得自行領取,滴滴我也可!

往期部分文章推薦——

項目1.3 視頻播放器

用了都說好的Python專屬無廣告視頻播放器,良心到想為它瘋狂打call

項目2.7 刮刮卡小程序

周末老板請吃東西,刮到多少算多少?Python帶你制作一款刮刮卡小程序。

項目3.2 自動換壁紙

【Python高級技能】超炫酷,電腦每天自動換壁紙,這個神器適合你。

項目3.3 藝術字簽名

【藝術字簽名生成器】】試卷家長簽字居然被嫌棄了|“我覺得我還能再搶救一下,你看行嘛?“

項目 3.9 碼住雪景漫天飄雪小程序

【Python碼住雪景小程序】雪景人像最強攻略:讓你一下美10倍、美醉了(中國人不騙中國人)

項目 4.0 GIF制作神奇(斗羅大陸為例)

【Python神器】推薦這款傻瓜式GIF制作工具,以後別再說不會了(好用到爆~)

文章匯總——

項目1.0 Python—2021 |已有文章匯總 | 持續更新,直接看這篇就夠了

(更多內容+源碼都在文章匯總哦!!歡迎閱讀~)


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved