There are a few ways that an application can tell Windows to not upscale/resample it for high-DPI displays (which it does for compatibility at the expense of appearance quality). Microsoft's recommended approach is to use an application manifest, rather than setting DPI awareness programmatically.

But for standalone scripts, setting DPI awareness programmatically seems easier—so much so that I haven't even attempted the application manifest approach :^). The simplest approach might be to invoke SetProcessDPIAware() from User32.dll, which is present in Vista and later. (Newer DPI awareness functions exist in Windows 8.1/10 which allow more specific settings, but I'm not sure Tk would take advantage of them.) That function can be invoked from XS, or from a Perl script by using a module like Win32::API:

# Make sure to do this **before** calling MainWindow->new
if ($^O eq 'MSWin32') {
    require Win32::API;
    # See https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setprocessdpiaware
    my $SetProcessDPIAware = Win32::API::More->new('User32', 'BOOL SetProcessDPIAware()');
    $SetProcessDPIAware->Call() or warn 'Failed to set process DPI awareness';
}

This approach works in Perl/Tk, as well as any of the wrappers for modern Tcl/Tk such as Tcl::pTk (disclaimer: I maintain this). There are very likely to be caveats to this approach; for example, although the value of $widget->scaling will be correctly updated, some elements like images will not be resized, and may appear smaller than expected.

Edit 2019-06-24: use Win32::API should instead be require Win32::API . Thanks vkon for catching this.


In reply to Re: Tk Windows 10 Scaling by chrstphrchvz
in thread Tk Windows 10 Scaling by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.