2018-12-19 14:28:19 weixin_44099558 阅读数 95

Python大家对于这门语言的理解大多是说Python是最简单的编程语言,但是这几个深坑肯定是十个人无一未踩过的!特意总结了一下这些坑,看看你踩过没?

学习Python中有不明白推荐加入交流裙
                号:735934841
                群里有志同道合的小伙伴,互帮互助,
                群里有免费的视频学习教程和PDF!

缩进

Python是强制缩进的语言,很多朋友第一次接触python时可能会不习惯,缩进老是犯错。

IndentationError: unexpected indent 

 

 

中英文符号

在Python编程中,符号是有中英文分别的。即使长得一样也很容易分别,一般的英文符号比中文符号苗条些,你可以在键盘上动手试试!

 


 
SyntaxError: invalid syntax 

 

单词错误

这个问题的解决方法是:我们Python程序员必须要长期从事编程,不然我们很难察觉到自己的英文就拼写错了,毕竟我们的英语水平大多不怎么样!

 


 
NameError: name 'world' is not defined 

 

代码块忘了冒号

Python的很多代码块结构必须要用冒号,像if、for这些有时候必须循环就要用到:,但是很多朋友总是忘记。

 


 
SyntaxError: invalid syntax 

 

IDE魔怔

IDE是一款非常强大的Python工具了,因为它会提示语法错误,而且有颜色、底线加以区分。但是有时候底线报错不准,那么你就头大了,分不清真假了!

 

纸上谈兵、瞎琢磨

很容易理解这两点,就是说很多学python的觉得很容易,有一部分人只会看书、视频学习,而从不自己去尝试。

另外一种,自己瞎琢磨却从不看别人是怎么做的。

这两点,一般都是那种学习能力很差的,又非常自傲的程序员才会做出来的事,科学的学习方法才是最有效的!

 

2008-04-10 15:48:00 iteye_13385 阅读数 9

Python 学习笔记(四) <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>

Python 在尽可能不增加新的语法和语义的情况下加入了类机制。这种机制是 C++ Modula-3 的混合。 Python 中的类没有在用户和定义之间建立一个绝对的屏障,而是依赖于用户自觉的不去 破坏定义 。然而,类机制最重要的功能都完整的保留下来。类继承机制允许多继承,派生类可以覆盖( override )基类中的任何方法,方法中可以调用基类中的同名方法。对象可以包含任意数量的私有成员。

Python 对象 这个词不一定指类实例。 Python 中并非所有的类型都是类:例如整型、链表这些内置数据类型就不是,甚至某些像文件这样的外部类型也不是,这一点类似于 C++ Modula-3 ,而不像 Smalltalk 。然而,所有的 Python 类型在语义上都有一点相同之处:描述它们的最贴切词语是 对象

对象是被特化的,多个名字(在多个作用域中)可以绑定同一个对象。这相当于其它语言中的别名。通常对 Python 的第一印象中会忽略这一点,使用那些不可变的基本类型(数值、字符串、元组)时也可以很放心的忽视它。然而,在 Python 代码调用字典、链表之类可变对象,以及大多数涉及程序外部实体(文件、窗体等等)的类型时,这一语义就会有影响。这通用有助于优化程序,因为别名的行为在某些方面类似于指针。例如,很容易传递一个对象,因为在行为上只是传递了一个指针。如果函数修改了一个通过参数传递的对象,调用者可以接收到变化--在 Pascal 中这需要两个不同的参数传递机制。

下面程序说话:

class MyClass:

    "A simple example class"

    i = 12345

    def f(self):

        return 'hello world'

那么 MyClass.i MyClass.f 是有效的属性引用,分别返回一个整数和一个方法对象。也可以对类属性赋值,你可以通过给 MyClass.i 赋值来修改它。 __doc__ 也是一个有效的属性,返回类的文档字符串: "A simple example class"

不过多数情况加上 __init__ 函数。类似构造函数。第一个参数一般 self ,为其自身。

 

派生类可能会覆盖其基类的方法。因为方法调用同一个对象中的其它方法时没有特权,基类的方法调用同一个基类的方法时,可能实际上最终调用了派生类中的覆盖方法。(对于 C++ 程序员来说, Python 中的所有方法本质上都是虚方法。)

 

派生类中的覆盖方法可能是想要扩充而不是简单的替代基类中的重名方法。有一个简单的方法可以直接调用基类方法,只要调用: "BaseClassName.methodname(self, arguments)" 。有时这对于客户也很有用。(要注意的中只有基类在同一全局作用域定义或导入时才能这样用。)

Python 同样有限的支持多继承形式。多继承的类定义形如下例:

class DerivedClassName(Base1, Base2, Base3):

    <statement-1>

    .

    .

    .

    <statement-N>

这里唯一需要解释的语义是解析类属性的规则。顺序是深度优先,从左到右。因此,如果在 DerivedClassName (示例中的派生类)中没有找到某个属性,就会搜索 Base1 ,然后(递归的)搜索其基类,如果最终没有找到,就搜索 Base2 ,以此类推。

 

小漏洞:派生类和基类取相同的名字就可以使用基类的私有变量。

2019-07-31 11:59:28 qq_44920726 阅读数 1539

输出文件的代码

from PyQt5.QAxContainer import QAxWidget
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QFileDialog,QMessageBox
import sys
from PyQt5.QtWidgets import QApplication

class AxWidget(QWidget):

    def __init__(self, *args, **kwargs):
        super(AxWidget, self).__init__(*args, **kwargs)
        self.resize(800, 600)
        layout = QVBoxLayout(self)
        self.axWidget = QAxWidget(self)
        layout.addWidget(self.axWidget)
        layout.addWidget(QPushButton('选择ppt,excel,word,pdf文件',
                                     self, clicked=self.onOpenFile))

    def onOpenFile(self):
        path, _ = QFileDialog.getOpenFileName(
            self, '请选择文件', '', 'excel(*.xlsx *.xls);;word(*.docx *.doc);;pdf(*.pdf)')
        if not path:
            return
        if _.find('*.doc'):
            return self.openOffice(path, 'Word.Application')
        if _.find('*.xls'):
            return self.openOffice(path, 'Excel.Application')
        if _.find('*.pdf'):
            return self.openPdf(path)
        
        
        

    def openOffice(self, path, app):
        self.axWidget.clear()
        if not self.axWidget.setControl(app):
            return QMessageBox.critical(self, '错误', '没有安装  %s' % app)
        self.axWidget.dynamicCall(
            'SetVisible (bool Visible)', 'false')  # 不显示窗体
        self.axWidget.setProperty('DisplayAlerts', False)
        self.axWidget.setControl(path)
        self.axWidget.show()

    def openPdf(self, path):
        self.axWidget.clear()
        if not self.axWidget.setControl('Adobe PDF Reader'):
            return QMessageBox.critical(self, '错误', '没有安装 Adobe PDF Reader')
        #self.axWidget.setControl("{233C1507-6A77-46A4-9443-F871F945D258}")
        self.axWidget.dynamicCall(
            'SetVisible (bool Visible)', 'false')  # 不显示窗体
        self.axWidget.dynamicCall('LoadFile(const QString&)',0,  path)

    
    
    
    def closeEvent(self, event):
        self.axWidget.close()
        self.axWidget.clear()
        self.layout().removeWidget(self.axWidget)
        del self.axWidget
        super(AxWidget, self).closeEvent(event)


if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    w = AxWidget()
    w.show()
    sys.exit(app.exec_())

self.openOffice(path, 'Word.Application')

self.openOffice(path, 'Excel.Application')

Word.Application 是office 中word的接口。 Excel.Application 是excel的接口。

代码运行如下:

 使用wps的接口打开word ,excel.

昨天又试了一下,发现使用wps 的接口打开word,excel 文件更加流畅。

代码如下

from PyQt5.QAxContainer import QAxWidget
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QFileDialog,QMessageBox


class AxWidget(QWidget):

    def __init__(self, *args, **kwargs):
        super(AxWidget, self).__init__(*args, **kwargs)
        self.resize(800, 600)
        layout = QVBoxLayout(self)
        self.axWidget = QAxWidget(self)
        layout.addWidget(self.axWidget)
        layout.addWidget(QPushButton('选择excel,word,pdf文件',
                                     self, clicked=self.onOpenFile))

    def onOpenFile(self):
        path, _ = QFileDialog.getOpenFileName(
            self, '请选择文件', '', 'excel(*.xlsx *.xls);;word(*.docx *.doc);;pdf(*.pdf)')
        if not path:
            return
        if _.find('*.doc'):
            return self.openOffice(path, 'kwps.Application')  #word 的接口
        if _.find('*.xls'):
            return self.openOffice(path, 'ket.Application')   #excel的接口
        
        if _.find('*.pdf'):
            return self.openPdf(path)
        
        
        

    def openOffice(self, path, app):
        self.axWidget.clear()
        if not self.axWidget.setControl(app):
            return QMessageBox.critical(self, '错误', '没有安装  %s' % app)
        self.axWidget.dynamicCall(
            'SetVisible (bool Visible)', 'false')  # 不显示窗体
        self.axWidget.setProperty('DisplayAlerts', False)
        self.axWidget.setControl(path)
        self.axWidget.show()

    def openPdf(self, path):
        self.axWidget.clear()
        if not self.axWidget.setControl('Adobe PDF Reader'):
            return QMessageBox.critical(self, '错误', '没有安装 Adobe PDF Reader')
        #self.axWidget.setControl("{233C1507-6A77-46A4-9443-F871F945D258}")
        self.axWidget.dynamicCall(
            'SetVisible (bool Visible)', 'false')  # 不显示窗体
        self.axWidget.dynamicCall('LoadFile(const QString&)',0,  path)

    
    
    
    def closeEvent(self, event):
        self.axWidget.close()
        self.axWidget.clear()
        self.layout().removeWidget(self.axWidget)
        del self.axWidget
        super(AxWidget, self).closeEvent(event)


if __name__ == '__main__':
    import sys
    from PyQt5.QtWidgets import QApplication
    app = QApplication(sys.argv)
    w = AxWidget()
    w.show()
    sys.exit(app.exec_())

 self.openOffice(path, 'kwps.Application')  #word 的接口

Kwps.Application 是wps 中的word文档的接口,Ket.Application 是excel文件的接口。

2018-03-15 19:27:00 weixin_30352645 阅读数 1

       很早之前,在看新闻不经意间看到了Python语言成为中小学生教师的必备课程,画画等教学老师们用python展示给学生。仅仅一面之缘,在选择选修课而发愁的我看到了python选修课,于是和好几个同班同学选了。

       上第一次课,便听到python即将加入计算机二级考试中,很开心,哎,上次的c语言二级毅然决然地想投入office ms二级。当然无关二级都会好好学习这门课的。

        走入正题,第一次作业很轻松的做完了,同时也初步让我认识到了他与其他语言的不同。

        要说到给老师课程上的意见,真是谈不上,老师的教学模式很好,让同学提出不懂的地方在很多课程上都没有,感到很欣慰,很满意。老师讲的忽快忽慢让我有事紧张有事放松,在老师幽默诙谐的语言下,一切都是OK OK.

 

转载于:https://www.cnblogs.com/bmhczdn/p/8575693.html

2014-12-03 11:21:34 tumin999 阅读数 1260

    最近有个VC程序急切希望具有windows 通知区域图标的功能,从CSDN上参考了几篇文章,但改的效果并不是很理想,于是自己开始思考此问题,并找到源自MS的例子源码。

    在MSDN中查找Shell_NotifyIcon,可以看到有个例子连接http://technet.microsoft.com/zh-cn/office/dd940367,但该页面上提示的代码下载链接已不能使用,于是考虑下载该页面中提到的windows 7 SDK。后确定了下载页面为:http://www.microsoft.com/en-us/download/details.aspx?id=8442,(Microsoft Windows SDK for Windows 7 and .NET Framework 4 (ISO)),下载后可单独安装其实例程序,然后可得到NotificationIcon示例程序。现对该过程做简单介绍。


  • 创建SystemTray图标

BOOL AddNotificationIcon(HWND hwnd)
{
    NOTIFYICONDATA nid = {sizeof(nid)};
    nid.hWnd = hwnd;
    // add the icon, setting the icon, tooltip, and callback message.
    // the icon will be identified with the GUID
    nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE | NIF_SHOWTIP | NIF_GUID;
    nid.guidItem = __uuidof(PrinterIcon);
    nid.uCallbackMessage = WMAPP_NOTIFYCALLBACK;
    LoadIconMetric(g_hInst, MAKEINTRESOURCE(IDI_NOTIFICATIONICON), LIM_SMALL, &nid.hIcon);
    LoadString(g_hInst, IDS_TOOLTIP, nid.szTip, ARRAYSIZE(nid.szTip));
    Shell_NotifyIcon(NIM_ADD, &nid);

    // NOTIFYICON_VERSION_4 is prefered
    nid.uVersion = NOTIFYICON_VERSION_4;
    return Shell_NotifyIcon(NIM_SETVERSION, &nid);
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HWND s_hwndFlyout = NULL;
    static BOOL s_fCanShowFlyout = TRUE;

    switch (message)
    {
    case WM_CREATE:
        // add the notification icon
        if (!AddNotificationIcon(hwnd))
        {
            MessageBox(hwnd,
                L"Please read the ReadMe.txt file for troubleshooting",
                L"Error adding icon", MB_OK);
            return -1;
        }
        break;
...
}

    在主窗口的WM_CREATE消息中,创建了通知区域图标。

  • 删除SystemTray图标

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HWND s_hwndFlyout = NULL;
    static BOOL s_fCanShowFlyout = TRUE;

    switch (message)
    {

case WM_DESTROY:
        DeleteNotificationIcon();
        PostQuitMessage(0);
        break;
...
    }
}

BOOL DeleteNotificationIcon()
{
    NOTIFYICONDATA nid = {sizeof(nid)};
    nid.uFlags = NIF_GUID;
    nid.guidItem = __uuidof(PrinterIcon);
    return Shell_NotifyIcon(NIM_DELETE, &nid);
}


  • 通知区域鼠标右键响应

    通知区域的消息是通过添加图标是由应用程序定义的自定义消息传回。

case WMAPP_NOTIFYCALLBACK:
        switch (LOWORD(lParam))
        {
        case NIN_SELECT:
            // for NOTIFYICON_VERSION_4 clients, NIN_SELECT is prerable to listening to mouse clicks and key presses
            // directly.
            if (IsWindowVisible(s_hwndFlyout))
            {
                HideFlyout(hwnd, s_hwndFlyout);
                s_hwndFlyout = NULL;
                s_fCanShowFlyout = FALSE;
            }
            else if (s_fCanShowFlyout)
            {
                s_hwndFlyout = ShowFlyout(hwnd);
            }
            break;

        case NIN_BALLOONTIMEOUT:
            RestoreTooltip();
            break;

        case NIN_BALLOONUSERCLICK:
            RestoreTooltip();
            // placeholder for the user clicking on the balloon.
            MessageBox(hwnd, L"The user clicked on the balloon.", L"User click", MB_OK);
            break;

        case WM_CONTEXTMENU:
            {
                POINT const pt = { LOWORD(wParam), HIWORD(wParam) };
                ShowContextMenu(hwnd, pt);
            }
            break;
        }
        break;
...
void ShowContextMenu(HWND hwnd, POINT pt)
{
    HMENU hMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDC_CONTEXTMENU));
    if (hMenu)
    {
        HMENU hSubMenu = GetSubMenu(hMenu, 0);
        if (hSubMenu)
        {
            // our window must be foreground before calling TrackPopupMenu or the menu will not disappear when the user clicks away
            SetForegroundWindow(hwnd);

            // respect menu drop alignment
            UINT uFlags = TPM_RIGHTBUTTON;
            if (GetSystemMetrics(SM_MENUDROPALIGNMENT) != 0)
            {
                uFlags |= TPM_RIGHTALIGN;
            }
            else
            {
                uFlags |= TPM_LEFTALIGN;
            }

            TrackPopupMenuEx(hSubMenu, uFlags, pt.x, pt.y, hwnd, NULL);
        }
        DestroyMenu(hMenu);
    }
}


  • 在图标区域显示出弹出通知

BOOL ShowLowInkBalloon()
{
    // Display a low ink balloon message. This is a warning, so show the appropriate system icon.
    NOTIFYICONDATA nid = {sizeof(nid)};
    nid.uFlags = NIF_INFO | NIF_GUID;
    nid.guidItem = __uuidof(PrinterIcon);
    // respect quiet time since this balloon did not come from a direct user action.
    nid.dwInfoFlags = NIIF_WARNING | NIIF_RESPECT_QUIET_TIME;
    LoadString(g_hInst, IDS_LOWINK_TITLE, nid.szInfoTitle, ARRAYSIZE(nid.szInfoTitle));
    LoadString(g_hInst, IDS_LOWINK_TEXT, nid.szInfo, ARRAYSIZE(nid.szInfo));
    return Shell_NotifyIcon(NIM_MODIFY, &nid);
}

BOOL ShowNoInkBalloon()
{
    // Display an out of ink balloon message. This is a error, so show the appropriate system icon.
    NOTIFYICONDATA nid = {sizeof(nid)};
    nid.uFlags = NIF_INFO | NIF_GUID;
    nid.guidItem = __uuidof(PrinterIcon);
    nid.dwInfoFlags = NIIF_ERROR;
    LoadString(g_hInst, IDS_NOINK_TITLE, nid.szInfoTitle, ARRAYSIZE(nid.szInfoTitle));
    LoadString(g_hInst, IDS_NOINK_TEXT, nid.szInfo, ARRAYSIZE(nid.szInfo));
    return Shell_NotifyIcon(NIM_MODIFY, &nid);
}

BOOL ShowPrintJobBalloon()
{
    // Display a balloon message for a print job with a custom icon
    NOTIFYICONDATA nid = {sizeof(nid)};
    nid.uFlags = NIF_INFO | NIF_GUID;
    nid.guidItem = __uuidof(PrinterIcon);
    nid.dwInfoFlags = NIIF_USER | NIIF_LARGE_ICON;
    LoadString(g_hInst, IDS_PRINTJOB_TITLE, nid.szInfoTitle, ARRAYSIZE(nid.szInfoTitle));
    LoadString(g_hInst, IDS_PRINTJOB_TEXT, nid.szInfo, ARRAYSIZE(nid.szInfo));
    LoadIconMetric(g_hInst, MAKEINTRESOURCE(IDI_NOTIFICATIONICON), LIM_LARGE, &nid.hBalloonIcon);
    return Shell_NotifyIcon(NIM_MODIFY, &nid);
}


Gitlab 上传文件

阅读数 1143

没有更多推荐了,返回首页