Tkinter Issue В моем текущем проекте я создаю pdf-файл с использованием reportlab и просматриваю его с помощью pdf viewer, который кодируется с помощью пакета wxPython.Когда я нажимаю кнопку, чтобы просмотреть pdf, программа просмотра открывается и работает должным образом, но графический интерфейс перестает отвечать на запросы, а кнопка зависает.Я должен убить этот процесс с помощью диспетчера задач.
import tkinter
from tkinter import ttk
import storage
from tkinter import messagebox
from tabulate import tabulate
from tkcalendar import Calendar, DateEntry
import wx
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4, inch
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle,
Paragraph, Image, Spacer
from reportlab.lib.styles import getSampleStyleSheet
import locale
import wx.lib.sized_controls as sc
from wx.lib.pdfviewer import pdfViewer, pdfButtonPanel
def job_folder():
window = tkinter.Tk()
window.geometry("1200x550+100+50")
window.resizable(False, False)
window.title("Job Folder")
Этот код создает файл PDF с использованием изображения верхнего и нижнего колонтитула и извлекает данные из базы данных.
app = wx.App()
frame = wx.Frame(None, title='Simple application')
doc = SimpleDocTemplate("job_folder1.pdf", pagesize=A4, rightMargin=30, leftMargin=30, topMargin=30,
bottomMargin=18)
doc.pagesize = A4
elements = []
logo = "header.jpg"
im = Image(logo, 7 * inch, 1.1 * inch, hAlign='CENTER')
elements.append(im)
elements.append(Spacer(1, 0.25 * inch))
db = storage.connect()
cursor = db.cursor()
cursor.execute(
"select CONCAT(prefix,job_no ) AS job,date_,account,shipper,
consignee, maste, house, freight, place_receipt, final_dest, status
"
" from sea_exp_tra_job_folder ")
data = cursor.fetchall()
db.close()
dataa = [('Job No', 'Date', 'Account', 'Shipper', 'Consignee', 'Master',
'House', 'PP/CC', 'Origin', 'Destination', 'Status')]
dataa.extend(data)
data = tuple(dataa)
style = TableStyle([('ALIGN', (1, 1), (-2, -2), 'RIGHT'),
('BACKGROUND', (0, 0), (-1, 0), colors.powderblue),
('TEXTCOLOR', (1, 1), (-2, -2), colors.black),
('VALIGN', (0, 0), (0, -1), 'TOP'),
('TEXTCOLOR', (0, 0), (0, -1), colors.black),
('ALIGN', (0, -1), (-1, -1), 'CENTER'),
('VALIGN', (0, -1), (-1, -1), 'MIDDLE'),
('TEXTCOLOR', (0, -1), (-1, -1), colors.green),
('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black),
('BOX', (0, 0), (-1, -1), 0.25, colors.black),
])
s = getSampleStyleSheet()
s = s["BodyText"]
s.wordWrap = 'CJK'
data2 = [[Paragraph(cell, s) for cell in row] for row in data]
t = Table(data2)
t.setStyle(style)
elements.append(t)
elements.append(Spacer(1, 0.25 * inch))
logo1 = "footer.png"
im1 = Image(logo1, 6 * inch, 0.6 * inch, hAlign='CENTER')
elements.append(im1)
doc.build(elements)
Этот код написан для просмотра файла PDF в программе просмотра wx pdf
def prev123():
locale.setlocale(locale.LC_ALL, 'C')
class PDFViewer(sc.SizedFrame):
def __init__(self, parent, **kwds):
super(PDFViewer, self).__init__(parent, **kwds)
paneCont = self.GetContentsPane()
self.buttonpanel = pdfButtonPanel(paneCont, wx.ID_ANY,
wx.DefaultPosition,
wx.DefaultSize, 0)
self.buttonpanel.SetSizerProps(expand=True)
self.viewer = pdfViewer(paneCont, wx.ID_ANY,
wx.DefaultPosition,
wx.DefaultSize,
wx.HSCROLL | wx.VSCROLL |
wx.SUNKEN_BORDER)
self.viewer.SetSizerProps(expand=True, proportion=1)
self.buttonpanel.viewer = self.viewer
self.viewer.buttonpanel = self.buttonpanel
if __name__ == '__main__':
import wx.lib.mixins.inspection as WIT
app = WIT.InspectableApp(redirect=False)
pdfV = PDFViewer(None, size=(800, 600))
pdfV.viewer.LoadFile(r'job_folder1.pdf')
pdfV.Show()
app.MainLoop()
Когда я нажимаю эту кнопку, этот графический интерфейс перестает отвечать на запросы, и мне приходится убивать этот процесс из диспетчера задач, пожалуйста, помогите мне с этим.
B2 = tkinter.Button(window, text="Preview and Print", width=14,
command=prev123)
B2.place(x=570, y=95)
window.mainloop()
job_folder()