天天看點

wxPython-列印對話框和頁面設定對話框(列印輸出)

實戰wxPython系列-024

wxPython-列印對話框和頁面設定對話框(列印輸出)

wx.PrintDialog類提供了一個用于指定列印機配置的對話框。該對話框允許使用者更改與文檔相關的設定,例如紙張尺寸和方向,打頁面範圍以及要列印的份數。它提供控件以使使用者能夠從可用的列印機中進行選擇,包括任何已配置的網絡列印機。 在Window上使用本機列印對話框。

wx.PageSetupDialog控件用于設定頁面詳細資訊以便列印。允許使用者設定邊框和邊距調整量、頁眉和頁腳以及縱向或橫向列印。

一、wx.PrintDialog簡介

Wx.PrintDialog列印和列印設定公共對話框。其常用方法有:

  • GetPrintDC(self):傳回列印對話框建立的裝置上下文(如果有的話)。當調用此函數時,裝置上下文的所有權将轉移到應用程式,是以必須顯式地删除它。
  • GetPrintData(self):傳回與列印對話框關聯的列印資料。
  • GetPrintDialogData(self):傳回與列印對話框關聯的列印對話框資料。
  • ShowModal(self): 顯示對話框,如果點選了wx.OK按鈕則傳回wx.ID_OK,否則傳回wx.ID_CANCEL。
wxPython-列印對話框和頁面設定對話框(列印輸出)

圖1:wx.PrintDialog類繼承關系

二、wx.PrintDialogData

wx.PrintDialogData儲存wx.PrintDialog中與可視特性相關的資料資訊。其常用方法有:

  • EnableHelp(self, flag):啟用或者禁用”幫助”按鈕。
  • EnablePageNumbers(self, flag):啟用或者禁用”頁碼” 範圍控制。
  • EnablePrintToFile(self, flag):啟用或者禁用”列印到檔案”複選按鈕。
  • EnableSelection(self, flag):啟用或者禁用”標明範圍”單選按鈕。
  • GetAllPages(self):如果使用者請求列印所有頁面,則傳回True。
  • GetCollate(self):如果使用者請求對文檔進行排序,則傳回True。
  • GetFromPage(self):傳回使用者輸入的from頁碼。
  • GetMaxPage(self):傳回最大頁碼。
  • GetMinPage(self):傳回最小頁碼。
  • GetNoCopies(self):傳回使用者請求列印的份數。
  • GetPrintData(self):傳回内部引用的wx.PrintData對象。
  • GetPrintToFile(self):如果使用者選擇列印到檔案,則傳回True。
  • GetSelection(self):如果使用者要求列印選擇項,則傳回True(其中“選擇”是特定于應用程式的概念)。
  • GetToPage(self):傳回使用者輸入的“列印到”頁碼。
  • IsOk(self):如果列印資料在列印對話框中使用有效,則傳回True。例如,如果目前列印機未設定,則在Windows上傳回False。在所有其他平台上,它傳回True。
  • SetCollate(self, flag):設定“Collate”複選框為True或False。
  • SetFromPage(self, page):設定起始頁碼。
  • SetMaxPage(self, page):設定最大頁碼。
  • SetMinPage(self, page):設定最小頁碼。
  • SetNoCopies(self, n):設定使用者要求列印的預設份數。
  • SetPrintData(self, printData):設定内部使用的wx.PrintData對象。
  • SetPrintToFile(self, flag):将“列印到檔案”複選框設定為True或False。
  • SetSelection(self, flag):選擇“選擇”單選按鈕。列印選擇的效果取決于應用程式如何實作該指令。
  • SetToPage(self, page):設定“列印到”頁碼。

三、wx.PrintDialog示範

下面的代碼示範如何使用wx.PrintDialog在程式中實作列印功能。

#列印對話框(PrintDialog)

import wx

class SamplePrintDialog(wx.Frame):
    
    def __init__(self, *args, **kw):
        super(SamplePrintDialog, self).__init__(*args, **kw)

        self.InitUi()

    def InitUi(self):
        #設定标題
        self.SetTitle("實戰wxPython: 列印對話框")
        #設定視窗尺寸
        self.SetSize(360, 240)

        self.CreateStatusBar()

        panel = wx.Panel(self)
        btnTest = wx.Button(panel, label="測試列印對話框", pos = (100, 20))
        btnTest.Bind(wx.EVT_BUTTON, self.OnOpenPrintDialog)

        self.Centre()

    def OnOpenPrintDialog(self, e):
        data = wx.PrintDialogData()
        data.EnableSelection(True)
        data.EnablePrintToFile(True)
        data.EnablePageNumbers(True)
        data.SetMinPage(1)
        data.SetMaxPage(10)
        #data.EnablePageNumbers(False)

        dlg = wx.PrintDialog(self, data)
        if dlg.ShowModal() == wx.ID_OK:
            data = dlg.GetPrintDialogData()
            #print("all pages: %d\n" % data.GetAllPages())
            sbar = self.GetStatusBar()
            if data.GetAllPages():
                sbar.SetStatusText("列印已完成")

        dlg.Destroy()

def main():
    app = wx.App()
    sample = SamplePrintDialog(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()           

運作上面的代碼,在Windows系統下,其界面如圖2:

wxPython-列印對話框和頁面設定對話框(列印輸出)

圖2:列印對話框測試

當我們點選”測試列印對話框”,将彈出列印對話框,如圖3所示:

wxPython-列印對話框和頁面設定對話框(列印輸出)

圖3:列印對話框

點選列印,列印完畢,傳回主視窗,在主視窗狀态欄顯示資訊”列印已完成”。

wxPython-列印對話框和頁面設定對話框(列印輸出)

圖4:列印測試完成

四、wx.PageSetupDialog頁面設定對話框

wx.PageSetupDialog實作一個頁面設定通用對話框。頁面設定對話框包含紙張大小(字母,A4, A5等),方向(橫向或縱向)的控件,以及(目前僅在Windows下)設定左,上,右和底部空白大小(毫米)的控件。因為在可用時使用本機對話框(目前所有主要平台都是這種情況)都使用本機對話框,是以該對話框的外觀因平台而異。

注意點選确認按鈕(wx.OK)和取消按鈕(wx.Cancel) 不會釋放本對話框,這一步必須由應用程式來完成。

wx.PageSetupDialog常用方法:

  • GetPageSetupData(self):傳回對話框關聯的wx.PageSetupDialogData對象。
  • ShowModal(self): 顯示對話框,如果點選了wx.OK按鈕則傳回wx.ID_OK,否則傳回wx.ID_CANCEL。
wxPython-列印對話框和頁面設定對話框(列印輸出)

圖5:wx.PageSetupDialog類繼承關系

五、wx.PageSetupDialogData

wx.PageSetupDialogData儲存與wx.PageSetupDialog相關的各種資訊。它包含一個wx.PrintData成員,用于儲存基本列印機配置資料(與wx.PageSetupDialogData存儲的使用者界面配置設定相對)。

wx.PageSetupDialogDat的常用方法有:

  • EnableMargins(self, flag):啟用或禁用頁邊距控制(僅限Windows)。
  • EnableOrientation(self, flag):啟用或禁用方向控制(僅限Windows)。
  • EnablePaper(self, flag):啟用或禁用紙張大小控制(僅限Windows)。
  • EnablePrinter(self, flag):啟用或禁用“列印機”按鈕,該按鈕調用列印機設定對話框。
  • GetDefaultInfo(self):如果對話框隻是傳回預設列印機資訊(如方向)而不是顯示對話框(僅限Windows),則傳回True。
  • GetDefaultMinMargins(self):如果頁面設定對話框将從目前標明的列印機屬性中擷取其最小邊距值(僅限Windows),則傳回True。
  • GetEnableMargins(self):如果列印機設定按鈕被啟用,則傳回True。
  • GetEnableOrientation(self):如果方向控制已啟用,則傳回True(僅限Windows)。
  • GetEnablePaper(self):如果紙張大小控制已啟用,則傳回True(僅限Windows)。
  • GetEnablePrinter(self):如果列印機設定按鈕被啟用,則傳回True。
  • GetMarginBottomRight(self):傳回以毫米為機關的右側(x)和底部(y)頁邊距。
  • GetMarginTopLeft(self):以毫米為機關傳回左邊(x)和上面(y)的頁邊距。
  • GetMinMarginBottomRight(self):傳回使用者可以輸入的右側(x)和底部(y)最小頁邊距(僅限Windows)。
  • GetMinMarginTopLeft(self):傳回使用者可以輸入的左(x)和上(y)最小頁邊距(僅限Windows)。
  • GetPaperSize(self):以毫米為機關傳回紙張大小。
  • GetPrintData(self):傳回與此關聯的列印資料的引用對象。
  • IsOk(self):如果與對話框資料相關聯的列印資料有效,則傳回True。例如,如果目前列印機未設定,則在Windows上傳回False。在所有其他平台上,它傳回True。
  • SetDefaultInfo(self, flag):如果對話框隻是傳回預設的列印機資訊(例如方向)而不是顯示對話框(僅限Windows),則傳遞True。
  • SetDefaultMinMargins(self, flag):如果頁面設定對話框将從目前標明的列印機屬性中擷取最小邊距值(僅限Windows),則傳遞True。機關為毫米。
  • SetMarginBottomRight(self, pt):以毫米為機關設定右側(x)和底部(y)頁邊距。
  • SetMarginTopLeft(self, pt):以毫米為機關設定左邊(x)和上面(y)的頁邊距。
  • SetMinMarginBottomRight(self, pt):設定使用者可以輸入的右側(x)和底部(y)最小頁邊距(僅限Windows)。
  • SetMinMarginTopLeft(self, pt):設定使用者可以輸入的左(x)和上(y)最小頁邊距(僅限Windows)。
  • SetPaperSize(self, size):設定紙張大小,機關為毫米。
  • SetPrintData(self, printData):設定與列印關聯的列印資料對象。

六、wx.PageSetupDialog示範

下面的代碼示範如何使用wx.PageSetupDialogData設定頁面相關控制資料,然後調用wx.PrintDialogData完成頁面設定。

#頁面設定對話框(wx.PageSetupDialog)

import wx

class SamplePageSetupDialog(wx.Frame):

    def __init__(self, *args, **kw):
        super(SamplePageSetupDialog, self).__init__(*args, **kw)

        self.InitUi()

    def InitUi(self):
        #設定标題
        self.SetTitle("實戰wxPython: PageSetupDialog示範")
        #設定視窗尺寸
        self.SetSize(320, 240)

        self.CreateStatusBar()

        panel = wx.Panel(self)
        btnTest = wx.Button(panel, label="測試頁面對話框", pos = (100, 20))
        btnTest.Bind(wx.EVT_BUTTON, self.OnTestPageSetupDialog)

        self.Centre()

    def OnTestPageSetupDialog(self, e):
        data = wx.PageSetupDialogData()
        data.EnableMargins(True)
        data.EnableOrientation(True)
        data.SetMarginTopLeft((10, 10))
        data.SetMarginBottomRight((10, 10))

        dlg = wx.PageSetupDialog(self, data)
        if dlg.ShowModal() == wx.ID_OK:
            data = dlg.GetPageSetupData()
            sbar = self.GetStatusBar()
            sbar.SetStatusText("頁面設定完成")

def main():
    app = wx.App()
    sample = SamplePageSetupDialog(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()           

運作上述代碼,點選視窗中的”測試頁面對話框”按鈕,打開頁面設定對話框,進行頁面設定。

wxPython-列印對話框和頁面設定對話框(列印輸出)

圖6:頁面設定對話框

七、本文知識點

  • 如何使用wx.PrintDialog進行列印操作。
  • 了解wx.PrintDialogData常用方法。
  • 了解和使用wx.PageSetupDialog頁面設定對話框。
  • 了解wx.PageSetupDialogData常用方法。

前一篇:wxPython – 單選和多選清單對話框

請關注,評論,收藏,點贊,和轉發。